J'ai un schéma d'un tiers que j'ai produit des objets C# d'utiliser Xsd2Code (d'autres options comme xsd.exe, XMLSpy etc, soit vomie ou écrasé 40Mo de code qui doit leur bibliothèque pour travailler)Comment puis-je obtenir des attributs de désérialisation de XmlSerializer à partir de plusieurs espaces de noms?
Quoi qu'il en soit, voici un exemple d'un élément de problème à partir du schéma:
<xsd:schema xmlns:ns1="something" xmlns:ns2="somethinelse" targetNamespace="something">
<xsd:complexType name="someType">
<xsd:sequence>
<xsd:element ref="element1" />
<xsd:element ref="ns2:element2" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
la classe wrapper généré ressemble à ceci:
[XmlType(Namespace="something")]
[XmlRoot("someType", Namespace="something", IsNullable=false)]
public partial class SomeType {
public string Element1 { get; set; }
[XmlElement(Namespace="somethinelse")]
public string Element2 { get; set; }
}
exemple XML en utilisant le schéma dit:
<someType>
<element1>SomeValue</element1>
<ns2:element2>SomeValue2</element2>
</someType>
(Toutes les erreurs sont mon taper l'exemple. le schéma est valide et non modifiable)
Et maintenant pour le problème. lorsque je tente de désérialiser le XML comme ceci:
XmlSerializer ser = new XmlSerializer(typeof(SomeType));
XmlReader reader = XmlReader.Create(new StringReader(xmlString))
SomeType obj = (SomeType)ser.Deserialize(reader)
Les objets générés sérialiser correctement, en ajoutant le « NS2 » aux éléments qui en ont besoin. Cependant, lors de la désérialisation, element1 est défini et element2 est vide.