2011-09-20 8 views
8

La existencia de la opción AsReference en Protobuf-net y la palabra que BinaryFormatter es un "serializador de gráficos" me llevan a suponer que BinaryFormatter no mantiene referencias y que hace una copia de cada objeto.Integridad de referencia en BinaryFormatter

Pero hice algunas pruebas y descubrí que todas las referencias en una sola llamada BinaryFormatter Serialize() o Deserialize() se mantienen incluso para referencias recursivas.

¿Puedo confirmar que BinaryFormatter realmente mantiene referencias? ¿Cómo es esto diferente de Protobuf-net? Parece que entiendo "serialización de gráficos" incorrectamente? ¿Qué más debería buscar?

Gracias de antemano.

Respuesta

7

tl; dr; la versión - BinaryFormatter siempre conserva las referencias.

El hecho de que BinaryFormatter es un "serializador gráfico" es sinónimo de "que conserva referencias", ya que es necesaria para reproducir con precisión un gráfico. La alternativa es un árbol serializador (que es más de ellos; XmlSerializer, DataContractSerializer (sin una opción en particular activado), y JavascriptSerializer protobuf-red sin AsReference están todos basados ​​en el árbol). Los serializadores de árbol no no generalmente conservan referencias (a menos que funcionen algunos trucos, es decir, lo que DataContractSerializer hace si habilita el modo de gráfico completo, o protobuf-net con AsReference). Los serializadores de árbol (sin vudú habilitado) tienden a explotar en un lío con un modelo recursivo, que los hace fáciles de detectar.

Cuestiones relacionadas