繁体   English   中英

将XML反序列化为在多个架构中定义的对象

[英]Deserializing XML to Objects defined in multiple schemas

我有一个XML文档,其中包含2种XML模式的类型。 一个(theirs.xsd)是我正在集成(不能编辑)的专有模式。 为此,我定义了自己的类型(mine.xsd),该类型是'any'元素中的元素,是专有类型。

我使用Visual Studio的xsd.exe从架构生成C#类。 但是,专有类型中的“ any”元素将作为XmlElement []生成,因此我的类型不会反序列化。

因此,我想我可以采用以下两种方法之一:生成将反序列化我的类型的类,而不是将其保留为XmlElement;或者采用XmlElements分别对它们进行反序列化。 要反序列化,我需要一个XmlReader,所以我需要从XmlElement转到XmlReader,但我不确定该怎么做。 谢谢。

示例:文件:themes.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>

从问题:

要反序列化,我需要一个XmlReader,所以我需要从XmlElement转到XmlReader,但我不确定该怎么做

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM