С protobuf-net он должен знать о наследовании заблаговременно (на самом деле, так же, как и DataContractSerializer
, обычно - через [KnownType(...)]
). В случае с protobuf-net ему также необходим уникальный ключ для их различения, например:
[DataContract, ProtoInclude(3, typeof(GatewayPageAddedToSite))]
public abstract class GatewayPageEvent:IDomainEvent
{...}
[DataContract]
public class GatewayPageAddedToSite : GatewayPageEvent
{...}
(т. Е. Базовый тип необходимо указать о производных типах)
Обратите внимание, что числа должны быть уникальными в каждом типе , поэтому не существует коллизии между "3" во включении и "3" в GatewayPageAddedToSite
- и на самом деле, GatewayPageAddedToSite
может использовать «1» и «2», если хочет.
Если модель вашего домена сгенерирована, то может помочь отдельный файл частичного класса:
[ProtoInclude(3, typeof(GatewayPageAddedToSite)]
partial class GatewayPageEvent {}
Если вы действительно не хотите расстраивать вашу модель этими вещами, то в v2 вы можете сделать это во время выполнения:
RuntimeTypeModel.Default[typeof(GatewayPageEvent)]
.AddSubType(3, typeof(GatewayPageAddedToSite));
что-нибудь из этого заставляет это работать?