XmlEnum - wie Enum mit Defaultwert nicht serialisieren?

19/09/2008 - 10:52 von Susanne Klemm | Report spam
Hallo zusammen,

ich habe ein Attribut welches laut Schema verschiedene Werte annehmen
kann und optional ist. In meiner Klasse wird dieses Attribut als ein
Enum-Property representiert. Nun möchte ich, dass beim Deserialisieren
das nicht vorhandene Attribut mit dem Defaultwert der Enum belegt wird
-> klappt auch, da ja eine nicht initiierte Enum-Variable eh immer den
Defaultwert (0) hat. Beim Serialisieren möchte ich, dass der Defaultwert
der Enum KEIN Attribut erzeugt. Leider wird das Attribut immer erzeugt.

public enum Format
{
[XmlEnum(null)]
None = 0,
[XmlEnum(Name = "text")]
Text
}

[XmlAttribute("format")]
public Format Format
{
get { return _format; }
set { _format = value; }
}

Beim Deserialisieren von <Item/> ist Format=Format.None
Beim Deserialisieren von <Item format="text"/> ist Format=Format.Text

Beim Serialisieren von Format.None entsteht <Item format="None"/>
Beim Serialisieren von Format.Text entsteht <Item format="text"/>

Wie kann ich die Ausgabe von format="None" (Format.None) verhindern?
Mein Workaround sieht folgendermaßen aus:

[XmlAttribute("format")]
public string FormatSerialize
{
get
{
if (_format != Format.none)
{
return
_format.ToString().ToLower(System.Globalization.CultureInfo.InvariantCulture);
}
return null;
}
set
{
_format = (Format)Enum.Parse(
typeof(Format), value, true); }
}

Würde mich über Tipps freuen.

Ciao
Susanne
 

Lesen sie die antworten

#1 Frank Dzaebel
19/09/2008 - 11:10 | Warnen spam
Hallo Susanne,

Beim Serialisieren möchte ich, dass der Defaultwert
der Enum KEIN Attribut erzeugt. Leider wird das Attribut
immer erzeugt. [...]

Wie kann ich die Ausgabe von format="None" (Format.None) verhindern?
Mein Workaround sieht folgendermaßen aus: [...]



Du kannst dem Serializer z.B. mitteilen, dass
"Format.None" der Standardwert der Eigenschaft ist.
Dann macht der XmlSerializer das automatisch nicht:

[DefaultValue(Format.None)]
[XmlAttribute("format")]
public Format Format
{
get { return format; }
set { format = value; }
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen