.Net XML Serialization на основе XSD?

Я сериализировал и десериализовывал объекты .NET с помощью класса XmlSerializer без проблемы, однако нам теперь нужен кто-то еще для рассмотрения тех данных для выполнения некоторого анализа его.

Для помощи, с которым мы произвели 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>

Bizarly, произведенный XML не придерживается XSD, сгенерированного от того же класса.

Мой вопрос затем, там способ сказать XmlSerializer сериализировать основанное на объектах на данном XSD?

Как в стороне, я посмотрел на другие способы зафиксировать это: я попытался повторно создать классы от сгенерированного XSD - это, казалось, имело ту же проблему. Я мог явно заявить упорядочивание элементов с помощью атрибута XmlElement, но я не представляю себе делать это для 400 + общественные собственности.

5
задан Nik 23 October 2009 в 12:42
поделиться