XML complexType с элементом, который заканчивается как "XmlElement"

В моем 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 to C# (xsd.exe или Xsd2Code), он генерирует 2 класса (commandType и loginType). Но, если бы я хотел отправить команду выхода из системы, XML должен выглядеть так:

<command>
    <logout />
</command>

Но у меня нет - какого бы то ни было эквивалента - logoutType. В сгенерированном классе, если я хочу использовать выход из системы, то commandType ожидает "XmlElement".

Предполагая, что инструменты XSD to C# не могут сгенерировать этот класс для меня, как вы пишете класс, который в основном сводится к простой сериализации и имеет тип XmlElement, так что он подходит для commandType?

(примечание: я не имею никакого контроля над XSD, иначе я бы изменил его, чтобы включить новый complexType)

1 ответ

Решение

На основе схемы, которая была опубликована, понятно, почему у вас есть XmlElement за logout, Как вы думаете, тип logout элемент есть? Это xs:anyType, Это может быть что угодно. Единственный тип.NET, который соответствует этому XmlElement, если вы не предпочитаете object,

Что ты хотел вместо XmlElement?

Другие вопросы по тегам