Десериализация XML в объекты, определенные в нескольких схемах - PullRequest
1 голос
/ 09 июня 2009

У меня есть документ XML, содержащий типы из двух схем XML. Один из них (ихs.xsd) является частной схемой, с которой я интегрируюсь (и не могу редактировать). Чтобы сделать это, я определяю свой собственный тип (mine.xsd), который является элементом внутри элемента 'any' и является проприетарным типом.

Я использую xsd.exe в Visual Studio для генерации классов C # из схем. Однако элемент any в проприетарном типе генерируется как XmlElement [], и поэтому мой тип не десериализован.

Так что я думаю, что могу пойти одним из двух способов: либо сгенерировать классы, которые будут десериализовать мой тип, а не сохранять его как XmlElement, либо взять XmlElements и десериализовать их индивидуально. Для десериализации мне нужен XmlReader, поэтому мне нужно перейти от XmlElement к XmlReader, что я не уверен, как это сделать. Спасибо.

Пример: Файл: itss.xsd

<xs:element name="ProprietaryContainer">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Файл: mine.xsd

<xs:element name="MyPairType">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="key" type="xs:string"/>
      <xs:element name="value" type="xs:long"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Файл: message.xml

<their:ProprietaryContainer>
  <their:name>pairContainer</their:name>
  <mine:MyPairType>
    <mine:key>abc</mine:key>
    <mine:value>long</mine:value>
  </mine:MyPairType>
</their:ProprietaryContainer>

1 Ответ

1 голос
/ 09 июня 2009

Из вопроса:

Для десериализации мне нужен XmlReader, поэтому мне нужно перейти от XmlElement к XmlReader, что я не уверен, как это сделать

using(XmlReader reader = new XmlNodeReader(element)) {
    //... use reader
}
...