protobuf.net наследование-использование ImplicitFields = ImplicitFields.Все поля


У меня есть базовый класс, который украшен [ProtoContract(ImplicitFields = ImplicitFields.AllFields)]

Чтобы иметь возможность сериализовать производный класс, мне нужно только добавить ProtoInclude? поскольку производные поля класса не сериализуются - работает ли наследование только с Protomember?

1 2

1 ответ:

Protobuf не полностью поддерживает наследование вам нужно сделать небольшое украшение в вашем базовом классе.

[
ProtoContract(),
ProtoInclude(100, typeof(Peer)),
ProtoInclude(101, typeof(Instruction))
]
class Base {...}

[ProtoContract()]
class Peer: Base
{ ... }

[ProtoContract()]
class Instruction: Base
{ ... }

Для производных классов, которые предоставляют свойства только через базовый класс.