Die XML-Serialisierung der Standardwerte von optionalen Parametern
Habe ich eine Reihe von Klassen erstellen mit xsd.exe und ich bin versucht, serialise Sie. Jedoch, ein Attribut ist nicht enthalten in der resultierenden XML. Hier ist der Teil des Schemas, wo das problem liegt.
<xsd:element name="Widget">
<xsd:complexType>
/* sequence removed for brevity */
<xsd:attribute name="Version" type="Version" use="optional" default="1.1"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="Version">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="1.0"/>
<xsd:enumeration value="1.1"/>
</xsd:restriction>
</xsd:simpleType>
xsd.exe generiert eine Eigenschaft namens "Version" auf "Widget" - Klasse und eine weitere Eigenschaft namens "VersionSpecified", aber dieser nicht erscheinen, generieren Sie das Attribut an, wenn ich zu serialisieren, auch wenn auf true gesetzt:
[XmlAttributeAttribute]
[DefaultValueAttribute(Version.Version_1_1)]
public Version Version { get; set; }
[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
- Und dies ist die enumeration, auf denen es basiert:
///<remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
[XmlEnumAttribute("1.0")]
Version_1_0,
[XmlEnumAttribute("1.1")]
Version_1_1,
}
Code-snippet wie pro Antrag
Widget widget = new Widget();
widget.Version = Version.Version_1_1;
widget.VersionSpecified = true;
XmlSerializer serializer = new XmlSerializer(widget.GetType());
serializer.Serialize(/*Memory Stream object*/, widget);
Hat jemand irgendwelche Gedanken auf, warum die Serialisierung lehnt die Einführung der Attribut?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sein, weil Sie den Standardwert angegeben als "1.1". Die serialiser wird nicht das element/- Attribut, wenn die Eigenschaft gleich dem default-Wert.
Müssen Sie die VersionSpecified-flag auf true vor dem serialisieren. Das ist, wie es weiß oder nicht, ob dieses optionale Attribut serialisiert werden soll.