2012-02-08 39 views
2

[XmlElement(IsNullable = true)]をクラスレベルで宣言して、クラス内のすべてのプロパティがヌルであってもXMLにシリアル化されるようにする方法はありますか?クラスレベルで[XmlElement(IsNullable = true)]を宣言する

public BankAccount BankAccount { get; set; }

むしろデフォルト欠けている要素よりも、<BankAccount xsi:nil="true" />を生じるはずです。

私はこれを試しましたが、コンパイラは(正しく)属性がクラス宣言に有効ではないことを示しています。

この理由は、これをすべてのプロパティに指定したくないからです。


編集:これは私が使用していますシリアライズ方法である:

 var serializer = new XmlSerializer(FormType); 
     var stream = new MemoryStream(); 

     serializer.Serialize(stream, form); 
+0

あなたは 'XmlSerializer'または' DataContractSerializer'でこれをやっている、とあなたは、Webサービスでこれをやっていますか? Webサービスの外部で 'XmlSerializer'を使用している場合は、XmlAttributesOverride'のオーバーロードを使用して属性を強制的に使用することができます(ただしこれは試したことはありません)。これは古いASMXスタイルのWebサービスでも利用可能ですが、 'XmlSerializerFormatAttribute'を使用してWCFでこれを行うことはできません。 –

+0

'XmlSerializer'は、クラスをxmlファイルに永続化します。 – Darbio

+0

'XmlAttributesOverride'クラスを見て、そのインスタンスを受け入れる' XmlSerializer.Serialize'のオーバーロードを使う価値があります。私の理解では、すべてのXml属性の動作をオーバーライドして明示的に 'XmlAttributeOverride'インスタンスでオーバーライドを指定することができます。私はそれを行ったことがないので、私はそれがどのように動作するかはわかりませんが、私はこれと同じ質問を答えとして見たことが分かっています。 –

答えて

2

残念ながら、あなたは、XMLシリアル化のために、あなたのクラスに注釈を付けるときに、明示的でなければなりません。 デフォルトの動作を必要としない限り、各プロパティには独自のXmlElement属性の注釈を付ける必要があります。

関連する問題