должно просто работать ; Я считаю, что проблема заключается в том, что атрибуты инвертированы (я приму к сведению, чтобы поднять более ясную ошибку в этом случае) - это должно быть:
[ProtoContract, ProtoInclude(14, typeof(Update))]
class Annoucement
{
}
[ProtoContract]
class Update : Announcement
{
}
т.е. База должна знать о потомках. Не я удалил дискриминатор из сериализации, так как он избыточен , если он напрямую связан с типом объекта - он обрабатывает это внутренне через ProtoInclude
и создаст для вас правильный тип , Каждый тип должен знать только о прямых подтипах, т.е.
A
- B
- C
- D
- E
- F
здесь A нужно знать о B и D; B должен знать о C; D нужно знать об E и F.
Обратите внимание, что перечисление «что это» является хорошей идеей, но нет необходимости, чтобы оно было полем - виртуальное свойство без поля может быть более подходящим. Если я неправильно понял, и тип сообщения не не относится к типу объекта, тогда игнорируйте меня; p
Также: публичные поля - не делайте этого. Подумайте о котятах ... Это будет работать , но свойства предпочтительнее (в общем, я имею в виду; ничего общего с protobuf-net).