Tengo una estructura de datos de gráficos que me gustaría codificar con protocol buffers. Hay conexiones cíclicas entre los vértices del gráfico. ¿Existe una forma estándar/común para codificar tales estructuras en protobuf? Un enfoque que viene a la mente es agregar un campo "id" a cada vértice y usar esos identificadores en lugar de punteros. Ej .:Codificación de estructuras de datos cíclicos (por ejemplo, gráficos dirigidos) utilizando memorias intermedias de protocolo
message Vertex {
required int32 id = 1;
required string label = 2;
repeated int32 outgoing_edges = 3; // values should be id's of other nodes
}
message Graph {
repeated Vertex vertices = 1;
}
entonces podría escribir clases que envuelven las clases generadas protobuf-, y automáticamente se convierten estos identificadores a los punteros reales de deserialización (y de nuevo a las identificaciones en la serialización). ¿Es este el mejor enfoque? Si es así, ¿alguien sabe de proyectos existentes que usan/documentan este enfoque? Si no, ¿qué enfoque recomendaría usted?
Interesante. Necesito soporte multiplataforma, por lo que probablemente no pueda usar su extensión protobuf-net. Pero tengo curiosidad sobre cómo lo implementó, es decir, ¿qué hay debajo de su capa de abstracción? –
@Edward básicamente, cada uno está silenciosamente anidado dentro de un mensaje con un idref (un enlace a un objeto preexistente mediante la clave), o una identificación (nueva clave generada por el serializador) y un submensaje. Pero debido a que el motor de serialización lo maneja, la implementación es opaca para el usuario –