2012-03-12 5 views
8

Mam raczej dużą klasę do serializowania jako Xml, a w celu zmniejszenia zmarnowanej przestrzeni chciałbym selektywnie XmlIgnore niektóre z właściwości klasy. Na przykład, jedna właściwość w klasie przypisano wartość tylko jedna na dziesięć razy lub więcej, a jeśli kod atrybut serializacji następującoCzy można użyć XmlAttributes do selektywnej XmlIgnore?

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

Jeśli nie ma wartości (przez większość czasu) jest to w odcinkach w kółko jak

WorkClass="" 

Czy istnieje opcja lub atrybut, który ignoruje właściwość do serializacji, jeśli jego wartość jest pusta, ale nie ignorować go, jeśli nie jest pusty?

Odpowiedz

10

Można utworzyć metody dla każdej z wartości, które mają być nie odcinkach

Poniższa metoda zwróci true gdy WorkClass zawiera coś innego niż pusty ciąg, jeśli używasz .NET Framework 4, ty może wybrać opcję string.IsNullOrWhitespace(), która będzie również sprawdzać puste miejsca ' '.

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

Kiedy XML serializer skończy, będzie to wyglądać dla tej metody, oparte na konwencji nazewnictwa, a następnie zdecydować, czy szeregować tę właściwość, czy nie.

Nazwa metody powinna zawsze zaczynać się od ShouldSerialize, a następnie kończyć się nazwą właściwości. Następnie wystarczy zwrócić wartość typu boolean na podstawie dowolnego warunku, którego chcesz, albo do serializowania wartości, czy nie.

+4

To niesamowite! To także nieintuicyjne IMHO. Spodziewałbym się jakiegoś modyfikatora w atrybucie serializacji, wiesz, coś takiego jak [XmlAttribute (IgnoreOnNullOrEmpty = "true")]. – Cyberherbalist