3

nullSOAP 呼び出し中に値をシリアル化する場合、WCF DataContractSerializer はあまり効率的ではないことに注意してください。監査目的で、ディスクに送信された正確なメッセージも記録するため、ストレージが無駄になります。複数の nil 要素を持つ典型的なメッセージは、次のように送信されます。

<MyMessage xmlns="myXmlns">
    <field0>1234567</field0>
    <field1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
    <field2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
    <field3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
    // etc
</MyMessage>

次のような SOAP 本体を生成すると、帯域幅とディスクの考慮事項が計り知れないほど改善されます。

<MyMessage xmlns="myXmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <field0>1234567</field0>
    <field1 xsi:nil="true" />
    <field2 xsi:nil="true" />
    <field3 xsi:nil="true" />
    //etc 
</MyMessage>

私の質問は、WCF クライアントを変更してルート要素の XSI 名前空間を統合し、各 nil 要素で繰り返されないようにするにはどうすればよいですか?

4

1 に答える 1

2

シリアライザーを微調整することはできませんが、メッセージインスペクターを実装すると、心ゆくまで操作できます。

ただし、nullを完全に削除し、nullが存在しないかどうかを確認したくない場合は、それを装飾することができます。

[DataMember(EmitDefaultValue=false)]
于 2012-08-26T17:32:55.973 に答える