Ho una struttura di dati del grafico che vorrei codificare con protocol buffers. Ci sono connessioni cicliche tra i vertici del grafico. Esiste un modo standard/comune per codificare tali strutture in protobuf? Un approccio che viene in mente è quello di aggiungere un campo "id" a ciascun vertice, e usare quegli id al posto dei puntatori. Es .:Codifica delle strutture di dati ciclici (ad esempio grafici diretti) utilizzando i buffer di protocollo
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;
}
Poi ho potuto scrivere le classi che avvolgono le classi protobuf generati, e convertire automaticamente questi identificatori ai puntatori reali su deserializzazione (e di nuovo a ids sulla serializzazione). È questo l'approccio migliore? Se è così, allora qualcuno sa di progetti esistenti che usano/documentano questo approccio? In caso contrario, quale approccio consiglieresti?
Interessante. Ho bisogno del supporto multipiattaforma, quindi probabilmente non posso usare l'estensione protobuf-net. Ma sono curioso di sapere come lo hai implementato - cioè, cosa c'è sotto il tuo livello di astrazione? –
@Edward fondamentalmente, ognuno è nidificato in modo silenzioso all'interno di un messaggio con un idref (un collegamento a un oggetto preesistente tramite chiave), o un id (nuova chiave generata dal serializzatore) e un sotto-messaggio. Ma poiché il motore serializza lo gestisce, l'implementazione è opaca per l'utente –