Tengo un conjunto de clases compiladas usando xsd.exe, y estoy intentando serializarlas. Sin embargo, un atributo no se está incluyendo en el XML resultante. Aquí hay una parte del esquema donde se encuentra el problema.XML Serialización de los valores predeterminados de los atributos opcionales
<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 genera una propiedad llamada "Versión" en una clase "Widget" y otra propiedad llamada "VersionSpecified", pero esto no parece generar el atributo cuando serializar incluso cuando se define como true:
[XmlAttributeAttribute]
[DefaultValueAttribute(Version.Version_1_1)]
public Version Version { get; set; }
[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
Y esta es la enumeración en la que se basa:
/// <remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
[XmlEnumAttribute("1.0")]
Version_1_0,
[XmlEnumAttribute("1.1")]
Version_1_1,
}
fragmento de código según la petición
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);
¿Alguien tiene alguna idea sobre por qué la serialización se niega a introducir el atributo?
Buena captura. Me lo perdí. –
¿Sabe si hay alguna manera de forzarlo a serializar un atributo opcional con un valor predeterminado, donde el valor se establece explícitamente en el código antes de llamar a serializar, como en el ejemplo de la pregunta? – Zack