2009-04-24 7 views
4

私はXMLファイルにシリアライズされたクラスを持っています。ほとんど使用されないが、常に作成されるいくつかのプロパティがあります。 XML内でそれらを削除すると、デシリアライズはデフォルト値を持つため、引き続き機能します。シリアル化中にデフォルトである属性の作成を省略するようにC#に指示するにはどうすればよいですか?

これらの不要な(bool)属性は、XMLを読みにくくします。

私は何とかC#に、まだデフォルト値を持つ要素や属性を省略するように指示できますか?

答えて

12

DefaultValueAttributeを指定し、値が一致した場合は出力しません。

+0

'[System.ComponentModel.DefaultValue(false)]' bool値のために行いました - ありがとうございました:) – MrFox

0

XMLIgnore()属性を使用して、シリアル化/逆シリアル化でインゴリングするプロパティをマークします。

+0

いいえ、それは** alays **除外します。問題は、デフォルト値があるときにそれを除外することです。 –

+1

私はOPがデフォルト値を持つプロパティを無視したいと思うと思います。あなたのソリューションは、常にプロパティが無視されるようにします。 –

6

ローランドは単純な値の答えを持っています。より複雑なシナリオでは、public bool ShouldSerializeFoo()(プロパティーの場合はFoo)というメソッドを追加できます - それはfalseを返します。それはシリアル化されません。

+0

このような補助メンバーがIntelliSenseに表示されないようにするために使用できるEditorBrowsableAttributeについて言及したいと思います。 –

+0

ShouldSerializeFoo()の代わりに、ブールFooSpecifiedプロパティを使用することもできます。 –

+0

* Specifiedパターンを使用する場合は、[XmlIgnore]、IIRC –