2010-03-05 9 views
5

serialisieren Ich habe einige .cs-Dateien von xsd.exe von einem XSD-Schema generiert.xsd.exe generierte Klassen nicht Standardwerte Attribute

Mein Problem ist, dass, wenn ich versuche, diese Klassen in XML zu serialisieren, die Attribute, deren Werte mit den im xsd-Schema definierten Standardwerten übereinstimmen, nicht serialisiert werden.

Ich fand heraus, dass mein Problem gelöst ist, wenn ich [System.ComponentModel.DefaultValueAttribute(typeof(<someType>), "<SomeValue>")] Attribut für das Mitglied entfernen, das ein Standardfeld darstellt.

Also meine Frage gibt es nicht eleganter Weg, dies zu tun? Gibt es zum Beispiel eine Möglichkeit, anzugeben, dass die Standardwerte trotzdem serialisiert werden sollen?

Antwort

4

Die kurze Version ist: ja. Es sieht so aus, als ob das der einfachste Ansatz ist.

Ich habe die „offensichtlich“ Dinge ausprobiert (insbesondere die *Specified und ShouldSerialize* Muster, die XmlSerializer unterstützt, sondern auch IsNullable) und es wird einfach auf den Wert enthält.

Die nächsten Optionen wären entweder IXmlSerializable (was einfach hart ist), oder XmlAttributeOverrides (eine Verdoppelung der Anstrengung) - von denen keiner besonders verlockend ist. Ich frage mich, ob Ihr aktueller Ansatz weniger Arbeit ist? Sie können die WSDL natürlich einfach exportieren und bearbeiten, um den Standard zu entfernen (und aus der bearbeiteten Version zu generieren).

Nebenbei - wenn dies WCF war, gibt es die [DataMember(EmitDefaultValue = ...)], die tut dies steuern; Vielleicht haben sie dies als Feature-Anfrage hinzugefügt?

+0

Danke für Ihre Antwort. In der Tat ist mein aktueller Ansatz weniger Arbeit, obwohl es nicht der beste ist. Vielleicht werde ich, wenn ich etwas Zeit habe, mit IXmlSerializable oder XmlAttributeOverrides herumhantieren. – Koynov

Verwandte Themen