Этот вопрос напрямую во многом связан с сопровождающим (ями) protobuf-net, но с кем-либо еще, пожалуйста, комментируйте.
Я пытался сериализовать класс, содержащий свойство, имеющее тип интерфейса, то есть:
[DataContract]
public class SampleDataClass
{
[DataMember(Order=1)]
public int Field1 { get; set; }
[DataMember(Order = 2)]
public IPayload Payload { get; set; }
}
[ProtoContract]
[ProtoInclude(1, typeof(Payload))]
public interface IPayload
{
int Field4 { get; set; }
}
[DataContract]
public class Payload : IPayload
{
[DataMember(Order = 1)]
public int Field4 { get; set; }
}
Мне удалось заставить это работать, изменив источник v1 protobuf-net.Я не видел никаких проблем с этим подходом, пока ProtoInclude определено для интерфейса.
Ясно, что для компиляции я должен был разрешить оформление ProtoContract и ProtoInclude на интерфейсах, плюс несколько других изменений здесьи там.(обратите внимание, я бы использовал DataContract / KnownType, однако эти атрибуты также не могут быть оформлены на интерфейсах)
Не могли бы вы прокомментировать возможные недостатки?