protobuf-net serializando gráfico de objetos

Resuelto jz87 asked hace 13 años • 1 respuestas

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.

jz87 avatar Jun 09 '11 21:06 jz87
Aceptado

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.

Marc Gravell avatar Jun 09 '2011 16:06 Marc Gravell