2011-09-20 13 views
8

L'esistenza dell'opzione AsReference in Protobuf-net e la parola che BinaryFormatter è un "serial serializer" mi portano ad assumere che BinaryFormatter non mantenga riferimenti e che faccia una copia di ogni oggetto.Integrità di riferimento in BinaryFormatter

Ma ho eseguito alcuni test e ho scoperto che tutti i riferimenti in una singola chiamata Serialize() o Deserialize() di BinaryFormatter vengono mantenuti anche per il riferimento ricorsivo.

Posso confermare che BinaryFormatter mantiene effettivamente i riferimenti? Com'è diverso da Protobuf-net? Sembra che capisco "serializzazione grafica" in modo errato? Cos'altro dovrei cercare?

Grazie in anticipo.

risposta

7

tl; dr; versione - BinaryFormatter conserva sempre i riferimenti.

Il fatto che BinaryFormatter è un "grafico serializzatore" è sinonimo di "conserva riferimenti", dal momento che è necessario di riprodurre accuratamente un grafico. L'alternativa è un albero serializzatore (che è più di loro; XmlSerializer, DataContractSerializer (senza particolare opzione abilitata), JavascriptSerializer e protobuf-netto senza AsReference sono tutti ad albero). serializzatori Albero fanno non generalmente preservare i riferimenti (a meno che non funzionano alcuni trucchi, vale a dire ciò che DataContractSerializer fa se si attiva la modalità full-grafico o protobuf-net fa con AsReference). I serializzatori di alberi (senza abilitazione del voodoo) tendono a esplodere in un caos con un modello ricorsivo, che li rende facili da individuare.