J'ai un ensemble de classes construites en utilisant xsd.exe, et j'essaie de les sérialiser. Toutefois, aucun attribut n'est inclus dans le fichier XML résultant. Voici une partie du schéma où le problème réside.XML Sérialisation des valeurs par défaut des attributs optionnels
<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 a généré une propriété appelée « Version » sur une classe « Widget » et une autre propriété appelée « VersionSpecified », mais cela semble ne pas générer l'attribut quand je sérialiser même lorsque la valeur true:
[XmlAttributeAttribute]
[DefaultValueAttribute(Version.Version_1_1)]
public Version Version { get; set; }
[Serialization.XmlIgnoreAttribute]
public bool VersionSpecified { get; set; }
Et voici l'énumération sur laquelle elle est basée:
/// <remarks/>
[GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[Serializable]
public enum Version
{
[XmlEnumAttribute("1.0")]
Version_1_0,
[XmlEnumAttribute("1.1")]
Version_1_1,
}
extrait de code selon la demande
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);
Est-ce que quelqu'un a des idées sur pourquoi la sérialisation refuse d'introduire l'attribut?
Bonne prise. J'ai manqué ça. –
Savez-vous s'il existe un moyen de forcer la sérialisation d'un attribut facultatif avec une valeur par défaut, où la valeur est explicitement définie dans le code avant d'appeler serialize, comme dans l'exemple de la question? – Zack