4

タイプを反映してRuntimeTypeModelを動的に作成しています。タイプを振り返るとき、私はその各プロパティを見て、(独自のメカニズムを使用して)タグを決定し、それをに追加しMetaTypeます。また、プロパティのタイプが、protobuf-netによってネイティブにシリアル化できるプリミティブではなく、ネストされたメッセージであるかどうかを判断する必要があります。これにより、そのタイプも再帰的に処理して、モデルに追加し、 protobuf-netによってシリアル化可能な外部タイプ。

たとえば、次のタイプについて考えているとします。

public class Foo
{
    public int Number { get; set; }
    public string Text { get; set; }
    public Bar InnerMessage { get; set; }
}

public class Bar
{
    TimeSpan Duration { get; set; } 
}

シリアル化するように求められました。Foo各プロパティのタイプごとに、新しいものとしてモデルに追加する必要があるかどうかを判断する必要がありMetaTypeます。明らかに、、intおよびstringタイプTimeSpanはモデルに追加する必要はありませんが、追加する必要がBarあります。プログラムでこの区別をするにはどうすればよいですか?switchこのロジックを(ブロックまたはif-elseチェーンで)ハードコーディングする必要がありますか?もしそうなら、protobuf-net r480はネイティブにどのタイプをサポートしますか(つまり、それらをモデルに追加すると、 「このタイプのデータには動作が組み込まれているため、この方法でモデルに追加することはできません」ArgumentExceptionという記述がスローされます)?

4

1 に答える 1

3

r583は、現在のCanSerializeContractType;を拡張することにより、これのサポートを追加します。現在CanSerializeBasicType、、および包括的ながありCanSerializeます。以前と同様に、これはnull許容型、リスト(ネストされていない)、および1次元配列を処理するための既存のサポートを保持します。

于 2012-08-21T09:00:08.547 に答える