Mam zestaw klas budowanych przy użyciu xsd.exe, a ja próbuję je serializować. Jednak atrybut nie jest uwzględniany w wynikowym kodzie XML. Oto część schematu, w którym leży problem.XML Serializacja wartości domyślnych opcjonalnych atrybutów
<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 generowane właściwość o nazwie „Wersja” w klasie „widget” i innej nieruchomości zwanej „VersionSpecified”, ale to nie wydaje się, aby wygenerować atrybut kiedy serializowania nawet gdy wartość true:
[XmlAttributeAttribute]
[DefaultValueAttribute(Version.Version_1_1)]
public Version Version { get; set; }
[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
I to jest wyliczenie, na których jest oparta:
/// <remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
[XmlEnumAttribute("1.0")]
Version_1_0,
[XmlEnumAttribute("1.1")]
Version_1_1,
}
fragment kodu jak na zamówienie
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);
Czy ktoś ma jakiekolwiek przemyślenia na temat dlaczego serializacja odmawia wprowadzenia atrybutu?
Dobry połów. Tęsknie za tym. –
Czy wiesz, że istnieje jakiś sposób zmuszenia go do serializowania opcjonalnego atrybutu z wartością domyślną, gdzie wartość jest jawnie ustawiona w kodzie przed wywołaniem serializacji, jak w przykładzie w pytaniu? – Zack