The immediate parent of each expected sub-type, not the ancestor.
So: BaseClass
needs to declare Intermediary
, and Intermediary
needs to declare Derived
:
[ProtoContract]
[ProtoInclude(42, typeof(Intermediary))]
public abstract class BaseClass { }
[ProtoContract]
[ProtoInclude(42, typeof(Derived))]
public abstract class Intermediary : BaseClass { }
[ProtoContract]
public class Derived : Intermediary { }