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.
Vielen dank an @~blaze~ für die Hilfe für das eigendliche(private) projekt wovon diese klassen hier ableiten
#Edit1:
Hmm, zu aller erst möchte ich sagen, dass es darauf ankommt.
Aber gute Frage, welche eine gute Antwort verdient:
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)
- ->Doku
- Für was jetzt das und nicht der BinaryFormatter?
- Guckst du Zitat unten
- 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
- 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:
- 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.
- 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 )
- Ich habe gelesen, dass die art wie der Bifo serialisiert zwischen .Net versionen variieren kann.
- 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“ ()