小编Nik*_*Nik的帖子

基于XSD的.Net XML序列化?

我一直在使用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" />
Run Code Online (Sandbox Code Playgroud)

XML是这样生成的(其中obj是我们的DataClass的一个实例):

Dim xs As New XmlSerializer(obj.GetType)
Dim xmlTextWriter As New XmlTextWriter(memoryStream, Encoding.UTF8)
xs.Serialize(xmlTextWriter, obj)
Run Code Online (Sandbox Code Playgroud)

...生成如下所示的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>
Run Code Online (Sandbox Code Playgroud)

奇怪的是,生成的XML不符合从同一个类生成的XSD.

我的问题是,有没有办法告诉XmlSerializer基于给定的XSD序列化对象?

顺便说一句,我已经看过其他修复方法:我尝试从生成的XSD重新生成类 - 这似乎有同样的问题.我可以使用XmlElement属性明确说明元素的排序,但我不喜欢为400多个公共属性做这个.

.net c# vb.net xsd xml-serialization

5
推荐指数
1
解决办法
8147
查看次数

标签 统计

.net ×1

c# ×1

vb.net ×1

xml-serialization ×1

xsd ×1