С учетом следующего кода:
[Serializable, ProtoContract]
[ProtoInclude(100, typeof(ValueA))]
[ProtoInclude(101, typeof(ValueB))]
public class Value
{
}
[Serializable, ProtoContract]
public class ValueA : Value
{
}
[Serializable, ProtoContract]
public class ValueB : Value
{
}
[Serializable, ProtoContract]
[ProtoInclude(1000, typeof(ContainerA))]
[ProtoInclude(1001, typeof(ContainerB))]
public class Container<T> where T : Value
{
[ProtoMember(1)]
public T Item;
}
[Serializable, ProtoContract]
public class ContainerA : Container<ValueA>
{
}
[Serializable, ProtoContract]
public class ContainerB : Container<ValueB>
{
}
Я получаю сообщение об ошибке при попытке сериализации ContainerA / ContainerB:
ProtoBuf.ProtoException: известный тип
ContainerB для ProtoIncludeAttribute
должен быть прямым подклассом
Container`1
Закомментирование одной из следующих строк - так что только один класс наследует от Container - снова сделает счастливым ProtoBuf:
[ProtoInclude(1000, typeof(ContainerA))]
[ProtoInclude(1001, typeof(ContainerB))]
Что здесь происходит и что с этим можно сделать?
ТИА