2012-03-12 24 views
8

Ho una classe piuttosto grande da serializzare come Xml, e al fine di ridurre lo spazio sprecato vorrei selettivamente XmlIgnore alcune delle proprietà di classe. Per esempio, una proprietà nella classe viene assegnato un valore solo uno su dieci volte o giù di lì, e se codifico l'attributo serializzazione come segueSi può usare XmlAttributes per XmlIgnore in modo selettivo?

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

Se non c'è alcun valore (la maggior parte del tempo) questo è serializzato più e più volte come

WorkClass="" 

esiste un'opzione o un attributo che ignora la proprietà per la serializzazione se il suo valore è vuoto, ma non ignorarlo se non è vuota?

risposta

10

È possibile creare metodi per ciascuno dei valori che si desidera non hanno serializzato

Il seguente metodo tornerà true quando WorkClass contiene qualcosa di diverso da una stringa vuota, se si sta utilizzando .NET Framework 4, è potrebbe scegliere di utilizzare string.IsNullOrWhitespace() che verificherebbe anche gli spazi vuoti ' '.

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

Quando il Serializzatore XML viene eseguito, cercherà per questo metodo, in base alla convenzione di denominazione e quindi scegliere se serializzare che la proprietà o meno.

Il nome del metodo deve sempre iniziare con ShouldSerialize e terminare con il nome della proprietà. Quindi devi semplicemente restituire un valore booleano in base a qualsiasi condizionale che desideri, o se serializzare il valore o meno.

+4

È fantastico! È anche IMHO non intuitivo. Mi sarei aspettato una sorta di modificatore sull'attributo serializzazione, sai, qualcosa come [XmlAttribute (IgnoreOnNullOrEmpty = "true")]. – Cyberherbalist

Problemi correlati