protocol-buffers protobuf-net

protocol buffers - Protobuf-net serializar objeto gráfico



protocol-buffers (1)

La especificación "protobuf" sin procesar, definida por Google, es un serializador de árbol (como XmlSerializer). Por lo tanto, de forma predeterminada , obtendría C serializada dos veces y dos objetos diferentes cuando se deserializara.

Sin embargo, esta es una pregunta tan común que en "v2" proporciono esto como un comportamiento opt-in; tenga en cuenta que solo debe usar esto para protobuf-net a protobuf-net, ya que otros clientes no esperarán esta configuración (aunque sigue siendo una corriente de protobuf válida).

Por ejemplo (usando atributos, bit, también puede usar un modelo de tiempo de ejecución):

[ProtoContract] public class A { ... [ProtoMember(5, AsReference=true)] public C Foo {get;set;} } [ProtoContract] public class B { ... [ProtoMember(7, AsReference=true)] public C Bar {get;set;} } [ProtoContract] public class C {...}

Esto serializará la instancia una vez , generando un ID único en la salida. Cuando esté deserializado, se utilizará el mismo objeto en ambos lugares.

Si tengo el objeto A y B, ambos contienen algún campo serializado campo F, y ambos apuntan al mismo objeto serializable C. ¿Protobuf-net se serializa por referencia o se serializa por valor? Cuando se deserializa el gráfico de objetos, ¿genera protobuf-net 2 objetos separados para AF y BF? Lo pregunto porque quiero saber si la serialización preserva la igualdad de referencia.