J'ai essayé de désérialiser un fichier xml en C# avec des classes générées à partir des schémas de xsd.exe. Malheureusement, seule une partie du fichier est correctement désérialisée, le reste est retourné comme nul pour des raisons que je ne peux pas résoudre.xmlserializer ne déserialise pas correctement le schéma avec l'importation
Mon processus est le suivant: A partir du fichier myschema.xsd à partir de laquelle le code C# est généré:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mc="myschema:common" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ttl="http://www.myuri.org/myschema" targetNamespace="http://www.myuri.org/myschema" elementFormDefault="qualified" attributeFormDefault="unqualified">
et le fichier importé parentschema.xsd est ainsi:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:mc="myschema:common" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="myschema:common" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="toplevel">
<xs:complexType>
<xs:sequence>
<xs:element ref="mc:toplevel_header" minOccurs="0"/>
<xs:element ref="mc:body"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="toplevel_header">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:anyURI"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="body" type="mc:body" abstract="true"/>
<xs:complexType name="body">
<xs:attribute name="id" type="xs:ID" use="required"/>
</xs:complexType>
<xs:element name="Entity" type="mc:Entity" abstract="true"/>
<xs:complexType name="Entity" abstract="true">
<xs:attribute name="href" type="xs:anyURI" use="optional"/>
</xs:complexType>
</xs:schema>
Je passe les deux fichiers de schéma ci-dessus pour XSD.exe:
>xsd.exe /c myschema.xsd parentschema.xsd
qui génère un fichier myschema_parentschema.cs
Pour le tester, je suis en train de désérialiser un exemple de fichier xml:
<?xml version=\"1.0\" encoding="UTF-8"?>
<toplevel version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="myschema:common"
xsi:schemaLocation="myschema:common http://www.myuri.org/parentschema.xsd">
<toplevel_header>
<name>MyName</name>
</toplevel_header>
<body id="body_1"
xmlns="http://www.myuri.org/schema"
xmlns:mc="myschema:common"
xsi:schemaLocation="http://www.myuri.org/myschema http://www.myuri.org/myschema.xsd">
<Foo href="http://www.google.com">
</Foo>
</body>
</toplevel>
que je passe au code XmlSerializer suivant, où le lecteur est un XmlReader pour le fichier xml ci-dessus:
XmlSerializer xs = new XmlSerializer (typeof (toplevel));
object deserializedObject = xs.Deserialize(reader);
toplevel fooBar = (toplevel)deserializedObject;
Assert.AreEqual("MyName", fooBar.toplevel_header.name); //passes OK
Assert.IsNotNull(fooBar.body); //<--------FAIL
Pourquoi l'objet désérialisé ont une propriété corporelle nulle, et comment puis-je la désérialiser correctement l'élément Foo?
croix posté à http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/256c43ab-5206-491f-b77e-42903b8c616a –
Des problèmes similaires rencontrés dans cet article: [http: // richnewman.wordpress.com/2008/01/28/problems-with-using-xsdexe-to-generate-net-classes-from-the-fpml-xsd-schema-introduction-to-using-fpml-with-net- tools-part-4 /] –
myschema.xsd semble incomplet ... – code4life