2009-08-03 19 views
0

In meinem XSD, ich habe so etwas wie dies:XML complex mit Element, das als "XmlElement" endet

<?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> 

Also, ein XSD zu C# Werkzeug (xsd.exe oder Xsd2Code), das erzeugt 2 Klassen (commandType und loginType). Aber wollte, wenn ich dto einen Abmeldebefehl vorlegen, die XML muss wie folgt aussehen:

<command> 
    <logout /> 
</command> 

Aber habe ich nicht bekam - was auch immer das Äquivalent eines - logoutType. Wenn ich in der generierten Klasse Logout verwenden wollte, erwartet commandType ein "XmlElement".

Angenommen die XSD to C# -Werkzeuge können diese Klasse für mich nicht generieren, wie schreibt man eine Klasse, die im Grunde nur auf Serialisierung basiert und vom Typ XmlElement ist, so dass es mit dem commandType übereinstimmt?

(Anmerkung: Ich habe keine Kontrolle über die XSD ist, sonst würde ich es einen neuen complex aufzunehmen geändert haben) auf dem Schema

Antwort

0

Basierend, die jetzt veröffentlicht wurde, ist es klar, warum Sie eine XmlElement haben für logout. Was denkst du, ist der Typ des Elements logout? Es ist xs:anyType. Es könnte alles sein. Der einzige .NET-Typ, der dem entspricht, ist XmlElement, es sei denn, Sie bevorzugen object.

Was wollten Sie anstelle von XmlElement?

+0

Nun, ich habe versucht, so wenig XSD wie möglich einzusetzen, weil sonst diese Seite riesig wird und niemand sie betrachten wird, aber anscheinend ist das nicht genug. Das XSD validiert und das XML ist gültig. Eigentlich bin ich mir nicht sicher, ob Sie Recht haben, sorry, denn die "" bedeutet, dass nur einer von ihnen erforderlich ist. – Paul

+0

Nun, ja, jetzt, wo du die XSD postest! Du hast recht. Ein Befehl könnte eine Anmeldung oder eine Abmeldung sein. –

+0

Es hatte das Element noch bevor ich es bearbeitet habe. Wie auch immer, es ist völlig nebensächlich. Das war nicht mein Problem, mein Problem war, wie man eine Klasse vom Typ "XmlElement" erstellt, die der Serializer erwartet. – Paul