我一直使用XmlSerializer类对.NET对象进行序列化和反序列化,没有问题,但现在我们需要让其他人查看数据以执行一些分析。
为了帮助这个过程,我们基于我们的类创建了一个XSD,命令如下:
xsd.exe /t:DataClass Assembly.exe
XSD的开头看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="DataClass" nillable="true" type="DataClass" />
<xs:complexType name="DataClass">
<xs:complexContent mixed="false">
<xs:extension base="BaseDataClass">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="StudyID" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="Position" type="xs:int" />
<xs:element minOccurs="1" maxOccurs="1" name="IViewer" type="xs:string" />
XML是这样生成的(其中obj是我们DataClass的一个实例):
Dim xs As New XmlSerializer(obj.GetType)
Dim xmlTextWriter As New XmlTextWriter(memoryStream, Encoding.UTF8)
xs.Serialize(xmlTextWriter, obj)
...生成如下所示的XML:
<?xml version="1.0" encoding="utf-8"?>
<DataClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Version>SixMonthQ-E1</Version>
<IViewer xsi:nil="true" />
<Language xsi:nil="true" />
...
<StudyID>12345</StudyID>
令人惊奇的是,生成的XML与从同一类生成的XSD不一致。
我的问题是,有没有办法告诉XmlSerializer根据给定的XSD序列化对象?
另外,我已经尝试了其他修复方法: 我尝试从生成的XSD重新生成类-这似乎有同样的问题。 我可以使用XmlElement属性显式地指定元素的顺序,但我不想对400多个公共属性这样做。