XML complexType,其元素最终为“XmlElement”

时间:2009-08-03 22:50:50

标签: c# xml-serialization xsd xsd.exe xsd2code

在我的XSD中,我有类似的东西:

<?xml version="1.0" encoding="utf-8" ?>
<schema xmlns:jump="testThingy" elementFormDefault="qualified" targetNamespace="testThingy" xmlns="http://www.w3.org/2001/XMLSchema">
  <element name="command" type="jump:commandType" />
  <complexType name="loginType">
    <sequence>
      <element name="userName" />
    </sequence>
  </complexType>
  <complexType name="commandType">
    <sequence>
      <choice>
        <element name="login" type="jump:loginType" />
        <element name="logout" />
      </choice>
      <!-- There are other elements here but they are IRRELEVANT to the question -->
    </sequence>
  </complexType>
</schema>

因此,使用XSD到C#工具(xsd.exe或Xsd2Code),这会生成2个类(commandType和loginType)。但是,如果我想要提交注销命令,那么XML需要如下所示:

<command>
    <logout />
</command>

但是,我没有 - 无论等同于 - logoutType。在生成的类中,如果我想使用logout,那么commandType需要一个“XmlElement”。

假设XSD到C#工具不能为我生成这个类,你如何编写一个基本上只是序列化为类的类,并且类型为XmlElement,因此它适合于commandType?

(注意:我无法控制XSD,否则我会将其更改为包含新的complexType)

1 个答案:

答案 0 :(得分:0)

根据现在发布的架构,很清楚为什么XmlElementlogout。您认为logout元素的类型是什么?它是xs:anyType。它可能是任何东西。唯一与之匹配的.NET类型是XmlElement,除非您更喜欢object

你想要什么而不是XmlElement