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 / KnowTypeを使用しますが、これらの属性はインターフェイスで装飾することもできません)

考えられる欠点についてコメントしていただけますか?

4

1 に答える 1

2

私が見ることができる主な不具合は、ペイロードに関して、これがデータをサブメッセージに移動することです。私はv2の周りにいくつかの同様のデザインを持っており、うまくいけばこれを回避し、ほとんどの値をプライマリメッセージに保持します。正気の理由から、私は主にこの変更のためにv2だけを念頭に置いていました(2つの実装は別々であり、v2ははるかに優れたタイプモデルを持っているため)。

ただし、両方の使用モードをサポートできるはずです。v1のパッチとして(同じライセンスなどで)送信したい場合は、喜んで見てみます:)


これはv2の標準機能として利用可能です

于 2010-08-19T17:58:19.290 に答える