1

この XML フラグメントを含むリクエストを生成する必要がある WCF クライアントがあります。

<reason xsi:nil="true" nullFlavor="NA" typeCode="RSON" />

スキーマはサーバーによって決定され、私の管理下にはありません。nullFlavor生成されたプロキシ コードには、(特に) プロパティとを含む reason 要素のクラスがありtypeCodeます。プロキシは XmlSerializer を使用します。

どうすればそのようなフラグメントを生成できますか? XmlSerializer はxsi:nil、対応するメンバーが null の場合にのみ属性を発行します。null の場合、属性として出力されるプロパティを持つことはできません!

ところで、フラグメントは、nil 要素に子要素または内部テキストを含めることはできませんが、属性を含めることができると述べている XML スキーマ インスタンス仕様に従って合法です。

4

2 に答える 2

2

これは、まだこの問題に苦しんでいる人のために私が使用した解決策です. ちょっとしたハックですが、うまくいきます。nillable をオフにして、以下のように属性を追加します

[XmlAttributeAttribute( AttributeName = "nil", Namespace = "http://www.w3.org/2001/XMLSchema-instance" )]
public bool NillAtt
{
    get
    {
        return this.nillAtt;
    }
    set
    {
        nillAtt = value;
    }
}
于 2015-12-14T19:30:39.367 に答える
1

これは、XmlSerializer の既知の制限です。IXmlSerializable インターフェイスを巧みに使用して手動で XML を発行することで、この問題を回避できる場合があります。残念ながら、私が知っているクリーンな解決策はありません。

于 2010-10-27T15:45:50.187 に答える