我一直在尝试反序列化xsd.exe中的架构生成的类中的xml文件。不幸的是,只有一部分文件被正确地反序列化,其余的都是空的,原因是我无法解决。xmlserializer没有正确反序列化导入架构
我的过程如下:
<?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">
: 与从其生成C#代码的myschema.xsd文件起始
和进口parentschema.xsd文件是这样:
<?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>
我通过上面的两个模式文件到XSD.EXE:
>xsd.exe /c myschema.xsd parentschema.xsd
生成一个myschema_parentschema.cs文件
要测试它,我试图反序列化一个示例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>
我正经过以下XmlSerializer的代码,其中阅读器是上述XML文件的XmlReader:
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
为什么在反序列化对象有一个空的身体属性,我怎么得到它正确地反序列化Foo元素?
交叉发布到http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/256c43ab-5206-491f-b77e-42903b8c616a – 2010-05-04 07:37:03
本文中遇到的类似问题:[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-工具 - 部分4 /] – 2010-05-10 20:08:49
myschema.xsd看起来不完整... – code4life 2010-10-14 18:58:59