Подтвердить что ты не робот

Протоугольный граф объекта protobuf-net

Если у меня есть объект A и B, оба содержат некоторое поле сериализованного поля F, и оба указывают на один и тот же сериализуемый объект C. Производит ли protobuf-net сериализовать по ссылке или сериализовать по значению? Когда дескрипция объекта графа объектов, protobuf-net генерирует 2 отдельных объекта для A.F и B.F? Я спрашиваю, потому что хочу знать, сохраняет ли сериализация ссылочное равенство.

4b9b3361

Ответ 1

Необработанная спецификация "protobuf", определенная Google, представляет собой сериализатор дерева (например, XmlSerializer). Таким образом, по умолчанию вы будете получать сериализацию C дважды и два разных объекта при десериализации.

Однако, это такой общий вопрос, что в "v2" я предоставляю это как поведение при входе; обратите внимание, вы должны использовать это только для protobuf-net для protobuf-net, поскольку другие клиенты не ожидают этой конфигурации (хотя она остается действительным потоком protobuf).

Например (используя атрибуты, бит, вы также можете использовать модель времени выполнения):

[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 {...}

Это приведет к сериализации экземпляра один раз, генерируя уникальный идентификатор в выводе. При десериализации один и тот же объект будет использоваться в обоих местах.