タイプを反映して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という記述がスローされます)?