Generischer Dictionary Serializator

    • C#
    • .NET (FX) 4.5–4.8

    Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

      Generischer Dictionary Serializator

      Hey,
      Ich habe mal eine Möglichkeit gesucht, eine generische Dictionary zu serialisieren und hier ist was dabei rausgekommen ist:

      Ich finde diese ist sehr gelungen. Wichtig ist, zu beachten, dass in "TBinaryAccessor" der öffentliche Member 'BaseEncoding' für das (de)serialisieren eines strings zuständig ist.
      Dieser serialisierer kann von sich aus nur Primitive Datentypen (de)serialisieren, um dessen Funktionalität zu erweitern ist die Methode TBinaryAccessor.RegisterExtension gedacht.
      • Wie funktioniert das ganze jetzt?
        • ->Doku
        • TL;DR: Er sucht sich die entsprechenden methoden aus dem binary- reader/writer raus und nutzt diese um die dictionary zu zerlegen oder aneinanderzufügen (Kann auch durch eigene Metoden erweitert werden)
      • Für was jetzt das und nicht der BinaryFormatter?
        • Guckst du Zitat unten


      Vielen dank an @~blaze~ für die Hilfe für das eigendliche(private) projekt wovon diese klassen hier ableiten

      #Edit1:
      • Doku hinzugefügt(Englisch ums etwas verständlicher für alle zu gestalten, die über den gist stolpern)
      • Kleine interne code änderungen
      #Edit2:
      • Kann nun dictionaries of dictionaries de/serialisieren, solange es aus primitiven Basismembern besteht.
      • Mehr dokumentation folgt...

      ~blaze~ schrieb:


      Warum ist der Code außerdem besser, als einfach ein Dictionary (oder dessen Keys und jeweils zugehörige Values) direkt über einen BinaryFormatter zu serialisieren?

      Hmm, zu aller erst möchte ich sagen, dass es darauf ankommt.
      Aber gute Frage, welche eine gute Antwort verdient:
      1. Für die kommunikation zwischen 2 prozessen (auch übers netzwerk hinweg) benötigt man eine sogenannte contract assembly, welche sich nicht ändern darf, da ansonsten gewisse metadaten nicht mehr passen würden und somit würde der bifo einfach eine exception werfen.
      2. Der Bifo ist unsafe und kann (theoretisch) dazu ausgenutzt werden, das system zu exploiten (msdn.microsoft.com/de-de/libra…yformatter(v=vs.110).aspx ,https://security.stackexchange.com/a/44923 )
      3. Ich habe gelesen, dass die art wie der Bifo serialisiert zwischen .Net versionen variieren kann.
      4. Für komplexere angelegenheiten würde ich auch auf den BiFo setzen, ich beispielsweise setze diese dict-serialisierungsmethode dazu ein, die contracts zwischen server und client zu synchronisieren (eine art manifest)
      Wer Rechtschreibfehler findet darf sie behalten :)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „WeLoveBurgers“ ()

      Hi
      bitte dokumentiere den Code noch und füge ihn am besten direkt ins Forum ein. Es wäre klasse, wenn du außerdem (separat von der Dokumentation) erläutern würdest, wie der Code arbeitet, was das Ziel ist und warum er funktioniert.
      Warum ist der Code außerdem besser, als einfach ein Dictionary (oder dessen Keys und jeweils zugehörige Values) direkt über einen BinaryFormatter zu serialisieren?

      Viele Grüße
      ~blaze~
      @~blaze~: Ich hoffe meine bearbeitete Version stellt dich zufrieden :)
      @ErfinderDesRades: Nächste version

      #Edit: Sitze grad an einem github repo, welches das ganze etwas ausführlicher macht :P
      Wer Rechtschreibfehler findet darf sie behalten :)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „WeLoveBurgers“ ()

      Im Zusammenhang mit dem UserSettingsProvider haben wir auch schon mal ein SerializableDictionary gebaut, gugst Du hier.
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!