这个问题在很大程度上直接向 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; }
}
我已经设法通过更改 protobuf-net 的 v1 的源来使其工作。只要为接口定义了 ProtoInclude,我就没有看到这种方法有任何问题。
很明显,要编译它,我必须允许在接口上装饰 ProtoContract 和 ProtoInclude,并在这里和那里进行一些其他更改。(注意,我会使用 DataContract/KnownType 但是这些属性也不能在接口上修饰)
你能评论一下可能的缺点吗?