C# 基于XSD的.Net XML序列化?

C# 基于XSD的.Net XML序列化?,c#,.net,vb.net,xsd,xml-serialization,C#,.net,Vb.net,Xsd,Xml Serialization,我一直在使用XmlSerializer类对.net对象进行序列化和反序列化,没有任何问题,但是我们现在需要其他人查看该数据以对其执行一些分析 为了帮助实现这一点,我们基于类生成了一个XSD,如下所示: xsd.exe/t:DataClass Assembly.exe XSD的开头如下所示: <?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http

我一直在使用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 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:

<?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 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>

六个月HQ-E1
...
12345
奇怪的是,生成的XML不符合从同一类生成的XSD

那么,我的问题是,有没有一种方法可以告诉XmlSerializer根据给定的XSD序列化对象

另外,我还研究了其他解决方法: 我已经尝试从生成的XSD重新生成类-这似乎有同样的问题。
我可以使用XmlElement属性显式地声明元素的顺序,但我不想对400多个公共属性这样做。

不,对不起。似乎没有办法强迫
XmlSerializer
考虑模式

尝试使用xsd.exe及其生成的架构重新生成类(执行往返转换)

至少它可以让您了解xsd.exe命令在原始类的哪个方面遇到问题


也可以尝试xsd的替代方案:

请发布类的详细信息和完整的xsd。它应该总是按照相同的XSD进行序列化。抱歉,我不能这样做,但我确实开始将相关类复制到一个新项目中(以期将其缩减为我可以发布的内容),令人惊讶的是,在新项目中,rponducted的XML中的元素顺序与模式中的元素顺序相匹配。必须有特定于该项目的东西强制XML按该顺序生成——知道什么会影响排序吗?关于更新代码的另一件事是,XML包含xsi:nil=“true”属性,但生成的XSD没有nillable=“true”属性,因此它仍然无法通过验证!xsd2code对我有效,而xsd.exe未能创建适当的代码,这导致在序列化过程中出现一些奇怪的异常。