На самом деле, я довольно удивлен, что не бросил исключения - я буду расследовать! Чтобы это работало, базовый тип должен иметь уникальный способ указать каждый из подтипов. Это можно указать с помощью атрибутов или (в v2) во время выполнения. Например:
[ProtoContract]
[Serializable]
public class Web2PdfClient : Web2PdfEntity
{
}
[ProtoContract]
[ProtoInclude(7, typeof(Web2PdfClient))]
[Serializable]
public class Web2PdfEntity : EngineEntity
{ ... }
В 7
нет ничего особенного, кроме того, что он не должен вступать в конфликт с любыми другими элементами, определенными для этого типа. Можно определить несколько подтипов (с разными тегами). Также обратите внимание, что protobuf-net не смотрит на [Serializable]
, поэтому вам это не нужно, если вы не используете BinaryFormatter
(или аналогичный).
Аналогично, EngineEntity
должен рекламировать его ожидаемые подтипы и должен указывать элементы для сериализации (и против какого тега).