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, иначе я бы изменил его, включив новый комплексный тип)


person Paul    schedule 03.08.2009    source источник


Ответы (1)


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

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

person John Saunders    schedule 03.08.2009
comment
Ну, я пытался вставить как можно меньше XSD, потому что иначе эта страница станет огромной, и никто не будет ее смотреть, но, видимо, этого недостаточно. XSD проверяет, и XML действителен. На самом деле я все равно не уверен, что вы правы, извините, потому что ‹выбор› означает, что требуется только один из них. - person Paul; 04.08.2009
comment
Ну да, теперь, когда вы публикуете XSD! Ты прав. Команда может быть входом в систему или выходом из системы. - person John Saunders; 04.08.2009
comment
В нем был элемент «выбор» еще до того, как я его отредактировал. В любом случае, это совершенно не по делу. Это была не моя проблема, моя проблема заключалась в том, как создать класс типа XmlElement, который ожидает сериализатор. - person Paul; 04.08.2009
comment
Это msdn.microsoft.com/en-us/library/ класс system.xml.xmlelement.aspx. Дайте мне знать, если вам все еще нужна помощь после этого. - person John Saunders; 04.08.2009