Из коробки буферы протокола не имеют никакой ссылочной семантики.Вам нужно будет сделать перекрестную ссылку на них вручную, обычно используя искусственный ключ.По сути, на уровне DTO вы бы использовали ключ для CDataSet (который вы просто придумываете, возможно, просто увеличивающееся целое число), сохраняя ключ вместо элемента в m_refData / m_refParent и выполняя исправление вручную во время сериализации / десериализации.Вы также можете просто сохранить индекс в наборе CDataSet, но это может усложнить вставку и т. Д.Вам решать;так как это сериализация, вы можете утверждать, что вы не будете вставлять (и т. д.) за пределы первоначальной совокупности, и, следовательно, необработанный индекс в порядке и надежен.
Это, однако, очень распространенный сценарий - так что в качестве функции, специфичной для реализации, я добавил необязательное (opt-in) отслеживание ссылок в мою реализацию (protobuf-net), которое, по сути, автоматизирует вышеуказанное вобложки (поэтому вам не нужно менять свои объекты или открывать ключ вне двоичного потока).