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.