protobuf-net serializando gráfico de objetos
Si tengo los objetos A y B, ambos contienen algún campo serializado, el campo F, y ambos apuntan al mismo objeto serializable C. ¿Protobuf-net se serializa por referencia o por valor? Cuando se deserializa el gráfico de objetos, ¿protobuf-net genera 2 objetos separados para AF y BF? Lo pregunto porque quiero saber si la serialización preserva la igualdad de referencias.
La especificación sin formato "protobuf", definida por Google, es un serializador de árbol (como XmlSerializer). Entonces, de forma predeterminada, C se serializará dos veces y dos objetos diferentes cuando se deserialice.
Sin embargo, esta es una pregunta tan común que en "v2" la proporciono como un comportamiento de participación voluntaria; 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 secuencia de protobuf válida).
Por ejemplo (usando atributos, también puedes 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 una identificación única en la salida. Cuando se deserializa, se utilizará el mismo objeto en ambos lugares.