1

这个问题在很大程度上直接向 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 但是这些属性也不能在接口上修饰)

你能评论一下可能的缺点吗?

4

1 回答 1

2

我可以看到的主要故障是,就有效负载而言,这会将数据移动到子消息中。我在 v2 周围有一些类似的设计,希望能解决这个问题,将大多数值保留在主要消息中。出于理智的原因,我主要考虑了 v2 来进行此更改(因为两个实现是分开的,并且 v2 具有更好的类型模型)。

但是,应该可以支持这两种使用模式。如果您想将它作为 v1 的补丁发送(具有相同的许可证等),我很乐意看看 :)


这是 v2 的标准功能

于 2010-08-19T17:58:19.290 回答