3

私は持っていますList<HtmlAgilityPack.HtmlNode>が、protobuf-net は契約がないというエラーを出します。ソースがない場合、どうすれば契約を指定できますか? 実際には型を推測できないと言われましたが、属性を使用しなかったためだと思いますよね?

型がシリアライズ可能としてマークされていないため、デフォルトのバイナリシリアライザーも文句を言います。

編集:エラーメッセージは次のとおりです。

Type is not expected, and no contract can be inferred: HtmlAgilityPack.HtmlNode
4

2 に答える 2

5

率直に言って、HTML の場合、保存するだけです... htmlは、事前にシリアル化されています! ただし、質問に答えるには:

protobuf-net v2 では、実行時に TypeModel を構成できます。これにより、属性やその他のいくつかのトリックを介して実行できるすべてのことが可能になります (v2 では、他に何も指定されていない場合、属性は単にモデルを操縦するのに役立ちます)。また、これらすべてを実行時に実行できるため、型を変更する必要がなく、制御外のモデルに適用できます。デフォルトのモデル インスタンスは RuntimeTypeModel.Default で、型をモデルに追加し、各 MetaType を個別に構成できます (これは Type にマップされます)。これにより、適用するメンバー (プロパティ/フィールド)、サブタイプ、コールバックなどを指定できます。

それが複雑すぎる場合は、「サロゲート」を指定して、単純な DTO を構成し、標準の変換演算子 (明示的または暗黙的) を使用して複雑なモデルと単純な DTO モデルの間で変更することもできます。

参考までに、デフォルトモデルの重要性は次のとおりですSerializer.*。ただし、TypeModel インスタンスを使用してシリアライゼーション/デシリアライゼーションを実行する場合、同じ型に対して複数の異なる構成のモデルを使用できます。

HTML-agility-pack の完全な詳細を思い出すことはできませんが、protobuf-net を介してシナリオで使用できる主なオプションです。

于 2011-10-23T22:39:48.517 に答える
1

BSON では、任意のクラスに独自のシリアライザーを指定できます。http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Writeacustomserializerを参照してください。

これを使用して C# 動的変数をシリアル化する例を次に示します。

于 2011-10-23T22:04:00.127 に答える