2016-07-08 20 views
0

Ich verwende XSD.exe, um Klassen aus XSD -> C# mit automatischer Serialisierung zu generieren.Automatisch generierende Klassen für XSD, die ein Element enthalten, das ein C# -Schlüsselwort ist

Ein Element der XSD heißt event. Da es sich um ein C# -Schlüsselwort handelt, lautet der generierte Klassenname @event. Ich wusste nie, dass dies ein gültiger Klassenname ist, aber es ist hässlich.

Ich weiß, ich kann XSD.exe die Wahl der Klassennamen nicht steuern - sie bilden die XSD-Elementnamen. ABER Gibt es eine Möglichkeit, ich kann meine Klasse manuell umbenennen und C#/NET wird immer noch wissen, wie die Serialisierung zu tun? Gibt es ein Attribut, das ich zum Beispiel zur Klassendefinition hinzufügen kann?

Offensichtlich muss ich dies jedes Mal wiederholen, wenn ich die Klassen regeneriere.

Antwort

0

Sie können Klassen mit Attributen dekorieren, die die Serialisierung steuern.

Sehen Sie diese MSDN-Artikel: https://msdn.microsoft.com/en-us/library/2baksw0z(v=vs.110).aspx

Der MSDN-Artikel hat dies über Klassennamen zu sagen:

Es gibt zwei Attribute, die auf eine Klasse angewendet werden kann (und nur eine Klasse): XmlRootAttribute und XmlTypeAttribute. Diese Attribute sind sehr ähnlich. Das XmlRootAttribute kann nur auf eine Klasse angewendet werden: die Klasse, die bei der Serialisierung die öffnende des XML-Dokuments und das schließende Element darstellt - mit anderen Worten das Stammelement. Das XmlTypeAttribute dagegen kann auf jede Klasse einschließlich der Stammklasse angewendet werden.

[XmlRoot("NewGroupName")] 
[XmlType("NewTypeName")] 
public class Group{ 
    public Employee[] Employees; 
} 

Wenn diese Klasse kompiliert wird, und das XML Schema Definition Tool verwendet das Schema zu generieren, würden Sie die folgende XML beschreibt Gruppe.

<xs:element name="NewGroupName" type="NewTypeName"> 

Im Gegensatz dazu, wenn Sie eine Instanz der Klasse serialisiert sind, nur NewGroupName würde im XML-Dokument zu finden.

<NewGroupName> 
    . . . 
</NewGroupName> 
+0

Allgemeinen Link nur für Antworten sind verpönt (falls die Verbindung unterbrochen wird). Könnten Sie ein kleines Beispiel geben? –

+0

Ich habe mit Beispielen von der verknüpften MSDN-Seite aktualisiert, die sich auf die Frage beziehen – Joon