2010-04-23 4 views
1

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.

Répondre

0

Les données d'échantillon fournies avec nous contenaient un typeo dans l'espace de noms qui provoquait une désérialisation erronée. Allez comprendre.

Questions connexes