Referenzintegrität in BinaryFormatter

8

Die Existenz der AsReference-Option in Protobuf-net und das Wort, dass BinaryFormatter ein "Graph Serializer" ist, lassen mich annehmen, dass BinaryFormatter keine Referenzen hält und dass es eine Kopie jedes Objekts erstellt.

Aber ich habe einige Tests durchgeführt und festgestellt, dass alle Referenzen in einem einzigen BinaryFormatter Serialize () - oder Deserialize () -Aufruf auch für rekursives Referenzieren beibehalten werden.

Kann ich bestätigen, dass BinaryFormatter tatsächlich Referenzen enthält? Wie unterscheidet sich das vom Protobuf-Netz? Scheint, ich verstehe "Graph Serialisierung" falsch? Was sollte ich noch beachten?

Vielen Dank im Voraus.

    
Jake 20.09.2011, 01:27
quelle

1 Antwort

7

tl; dr; Version - BinaryFormatter behält Referenzen immer bei.

Die Tatsache, dass BinaryFormatter ein "Graph Serializer" ist, ist gleichbedeutend mit "es behält Referenzen bei", denn das ist erforderlich um einen Graph genau zu reproduzieren. Die Alternative ist ein Baum Serializer (der am meisten von ihnen ist; XmlSerializer , DataContractSerializer (ohne eine bestimmte Option aktiviert), JavascriptSerializer und protobuf-net ohne AsReference sind alle baumbasiert. Baum-Serialisierer behalten nicht im Allgemeinen die Referenzen (es sei denn, sie funktionieren mit einigen Tricks, d. H. Was DataContractSerializer tut, wenn Sie den Modus für volle Graphen aktivieren, oder protobuf-net mit AsReference ). Baum-Serialisierer (ohne Voodoo-Unterstützung) neigen dazu, in einem Chaos mit einem rekursiven Modell zu explodieren, wodurch sie leicht zu erkennen sind.

    
Marc Gravell 20.09.2011, 09:03
quelle