Xsd.exe funktioniert nicht gut, wenn zirkuläre Verweise vorliegen (d. h. ein Typ kann ein Element seines eigenen Typs direkt oder indirekt besitzen).
Bei zirkulären Verweisen verwende ich Xsd2Code. Xsd2Code behandelt zirkuläre Verweise gut und funktioniert innerhalb der VS IDE, was ein großer Vorteil ist. Es hat auch viele Funktionen, die Sie nutzen können, wie das Generieren des Serialisierungs-/Deserialisierungscodes. Stellen Sie sicher, dass Sie GenerateXMLAttributes aktivieren, wenn Sie die Serialisierung generieren (sonst erhalten Sie Ausnahmen für die Reihenfolge, wenn sie nicht auf allen Elementen definiert ist).
Beide funktionieren nicht gut mit der Choice-Funktion. Sie werden Listen/Sammlungen von Objekten erhalten, anstelle des gewünschten Typs. Ich würde empfehlen, Choice in Ihrem xsd zu vermeiden, wenn möglich, da dies nicht gut in eine stark typisierte Klasse serialisiert/deserialisiert wird. Wenn Sie sich jedoch nicht darum kümmern, dann ist es kein Problem.
Das Any-Feature in xsd2code wird als System.Xml.XmlElement deserialisiert, was ich wirklich praktisch finde, aber ein Problem sein kann, wenn Sie stark typisierte Objekte möchten. Ich verwende Any oft, wenn benutzerdefinierte Konfigurationsdaten zugelassen sind, sodass ein XmlElement praktisch ist, um es an einen anderen XML-Deserializer weiterzugeben, der an anderer Stelle benutzerdefiniert definiert ist.
0 Stimmen
@drzaus Ich hatte das früher funktioniert, aber jetzt, wenn ich eins hinzufüge, wird es als DataSet-Klasse generiert anstelle der Klassen, die ich erwarten würde. Ich füge einfach ein vorhandenes Element hinzu und wähle die XSD-Datei aus.