2011-01-28 12 views
1

protobuf-netを使用してWCFデータ契約をシリアル化しています。シリアライズ中に「FingerPrintで重複タグ9が検出されました」というエラーメッセージが表示されるWCF用protobuf-netシリアライザを使用しているときの問題

[ProtoContract],[ProtoInclude]または[Protomemberのような属性を使用していません。私のクラスでは[DataContract][DataMember]を使用しています。

+0

フィンガープリントとは何ですか? –

答えて

0

protobuf-netは(より明示的なものがない場合)任意の[DataMember]属性からOrderを使用します。それで、マークされた9はありますか?幾つ?各識別子は、protobuf-netのタイプごとに一意でなければなりません。

[ProtoMember]を追加して新しい識別子を付けることはできますか?ファイルがコード生成されている場合は、タイプ(メンバーではない)に対して[ProtoPartialMember]の部分クラスを作成しても同じことができます。

+0

FingerPrintプロパティのオーダーが41です。その特定のクラスのすべてのメンバーに[ProtoMember]属性が追加されました。しかし、同じエラーが発生しました。私はDataContractSerilizerを使用して同じものをシリアル化しますその作業上の罰金。事前に感謝します。 DataContractSerilizerの –

+0

出力は: - <請求Z:ID = "I1"> <ペリルI : false

+0

@vivek私はそれを再現することはできません。もしあなたが私がreproに使うことができる何かを投稿したり(私に直接送る - プロフィールを見ることができる)、私はおそらく原因を見つけることができます(私は注意する必要があります、私はその図書館の著者です) –

0

ohh gr8返信いただきありがとうございます。私は問題がなぜ発生したのかを把握しています。 私のクラスには、同じオーダー、つまりorder = 9という1つ以上のプロパティ(データメンバー)が含まれています。今、私はあなたが私にprotobuf.netの制限を教えれば、他のissue.Itに直面するかどうかを知ることができます私はクラスを直列化して非直列化することができます。

私はこのシリアライザをすべて置き換えるつもりです。このシリアライザ(protobuf.net)を追加したいもう一つは、BinarySearilizer(私のテストアプリケーションごとに)が10倍高速です。

+0

最初の行は、 "そして、引用するために:"私はその階級が9であるプロパティを1つだけ持っている "と述べた。限界? *グラフではなく*ツリー*で動作します(XmlSerializer、JavaScriptSerializer、およびDataContractSerializerはデフォルトですべてのツリーシリアライザです)。あなたのタイプが「オブジェクト」であることが分かっていればそれはうまくいきません...それは「MEX」の友人ではありませんが、そうでなければ岩です; p –

+0

返信ありがとうございました。適切なデフォルトルールセットエンコーディングが見つかりませんでした。私たちはSystem.Workflow.Activities.Rules.RuleSetをクラスのプロパティとして使用していますが、上記のエラーが発生します。私はDatacontractシリアライザを使用してこれをシリアル化できません。NetDataContractSerializerだけがserializeすることができます。ProtoBufを使用してシリアライズする必要があります? –

+0

あなたの最後のコメントが表示されませんでした。テキストに@Marcを含めない限り、通知はありません。 'RuleSet'はおそらく、契約ベースのシリアライザ(' NetDataContractSerializer'はフィールドベースのシリアライザですが、これは別です)によってシリアライズされるようには設計されていません。通常、(直列化の時点で) 'RuleSet'を適切なDTOに置き換えることをお勧めします。しかし、WFに精通しなくてもそれを伝えるのは難しいです。 –

関連する問題