2012-03-12 11 views
8

私はXmlとしてシリアライズするかなり大きなクラスを持っています。無駄なスペースを減らすために、いくつかのクラスプロパティを選択的にXmlIgnoreしたいと思います。例えば、クラス内の1つのプロパティが値10倍程度のうち一つだけを割り当てられ、XmlAttributesを使用してXmlIgnoreを選択することはできますか?

[XmlAttribute] 
public String WorkClass 
{ 
    get { return _workClass; } 
    set { _workClass = value; } 
} 

を次のように私は、シリアル化属性をコーディングする場合は値(ほとんどの時間)がない場合にはこれがあるさ以上のシリアライズと何度も繰り返し

WorkClass="" 

として、その値が空の場合は直列化のためのプロパティを無視するオプションまたは属性がありますが、それが空でない場合は、それを無視しませんか?

答えて

10

あなたはWorkClassが空の文字列以外のものが含まれている場合には、.NET Framework 4の、あなたを使用している場合は、以下の方法は、trueを返しますシリアライズさ

を持っていたいの各値のための方法を作成することができますstring.IsNullOrWhitespace()を使用することもできます。' 'もチェックされます。

public bool ShouldSerializeWorkClass() { 
    return !string.IsNullOrEmtpy(WorkClass); 
} 

のXmlシリアライザを実行

は、それが命名規則に基づいて、この方法を探して、そのプロパティをシリアル化するかどうかを選択します。

メソッドの名前は、常にShouldSerializeで始まり、プロパティ名で終わる必要があります。次に、値をシリアル化するかどうかを条件に応じて、ブール値を返すだけです。

+4

これは素晴らしいことです!それは非直感的なIMHOでもあります。私は[XmlAttribute(IgnoreOnNullOrEmpty = "true")]のような何らかの修飾子が直列化属性にあると予想していました。 – Cyberherbalist

関連する問題