Generieren Sie eine C # -Klasse aus XML

Antworten:

338

Ja, mit xsd.exe

D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.

D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.

Anmerkungen

Die Beantwortung des Verzeichnisses in der Entwickler-Eingabeaufforderung in d: \ temp kann hilfreich sein.

Wenn Sie Klassen für mehrdimensionale Arrays generieren, gibt es einen Fehler im XSD.exe-Generator, aber es gibt Problemumgehungen .

Darin Dimitrov
quelle
18
So verwenden Sie xsddie ausführen Entwickler Eingabeaufforderung für VS2013 unter dem Tools - Menü.
Jess
13
xsd.exefinden Sie unter:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian
7
Seien Sie gewarnt, wenn Sie eine große komplexe XML-Datei haben, wird die generierte Klasse so hässlich sein, dass sie fast unbrauchbar wird;)
Matthew Lock
3
Für mich xsd.exewurde gefunden bei: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179
413

Wenn Sie auf .NET 4.5 Projekt in VS 2012 (oder neuer) arbeiten, können Sie einfach einfügen Ihre XML - Datei als Klassen.

  1. Kopieren Sie den Inhalt Ihrer XML-Datei in die Zwischenablage
  2. Wählen Sie im Editor den Ort aus, an dem Ihre Klassen eingefügt werden sollen
  3. Wählen Sie im Menü die Option EDIT > Paste Special > Paste XML As Classes
miszczu
quelle
22
Ich wünsche mir nur, dass diese automatisch implementierten Eigenschaften generiert werden, wie dies beim Einfügen von JSON als Klassen der Fall ist. Derzeit bedeutet dies ein 6-fach aufgeblähtes Code-Ergebnis, das viel schwerer zu lesen ist. Das allein lässt mich leider nach einem anderen Werkzeug suchen.
Nicholas Petersen
1
Wurde dies von VS 2013 weggelassen?
Roger
3
@ Roger Ich habe VS 2013 nicht verwendet, aber ich denke, diese Funktion sollte vorhanden sein.
Stellen Sie
2
Dies ist viel schneller als xsd, aber die Ausgabe ist ungefähr gleich.
Jess
4
Wenn Sie keinen Resharper haben, verwenden Sie Regex und ersetzen Sie ihn durch public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n=> public $1 $2 { get; set; }und `private \ w + \ w + Field; \ r \ n \ r \ n`
AlexDev
44

Zuerst dachte ich, das Paste Special sei der heilige Gral! Aber dann habe ich es versucht und meine Haare wurden weiß, genau wie im Indiana Jones-Film.

Aber jetzt benutze ich http://xmltocsharp.azurewebsites.net/ und jetzt bin ich so jung wie immer.

Hier ist ein Ausschnitt dessen, was es generiert hat:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }
D. Kermott
quelle
5
Die Ausgabe dieses Tools ist nett, aber ich möchte nur ein Wort der Vorsicht walten lassen, um keine sensiblen Daten an diese Site (oder andere in dieser Angelegenheit) zu senden. Obwohl ich den angebotenen Service sehr schätze, gibt es keine Datenschutzrichtlinie und wenig bis gar keine Garantie dafür, dass das, was Sie einfügen, nicht protokolliert und überprüft wird usw.
SvenAelterman
2
Ich hatte eine XML-Datei mit einigen rekursiven Beziehungen (vielleicht heißt sie Kreisbeziehung , ich bin mir nicht sicher). Die anderen sind fehlgeschlagen, aber xmltocsharp.azurewebsites.net war auf dieser XML sehr erfolgreich.
Koray
4
@ D.Kermott danke für den Website-Link, ich habe ihn mir kurz angesehen und es sieht so aus, als ob er einen viel besseren Job macht als das Paste-Special. Der Code sieht sauberer aus, obwohl meine Test-XML mehr Klassen erstellt hat, war es viel schöner zu bedienen.
Harag
Schade, dass es scheint, die Reihenfolge der Klassen umzukehren (außerhalb der zuletzt aufgeführten Elemente)
Savage
22

Mir ist klar, dass dies ein ziemlich alter Beitrag ist und Sie wahrscheinlich weitergezogen sind.

Aber ich hatte das gleiche Problem wie Sie und beschloss, mein eigenes Programm zu schreiben.

Das Problem mit der Route "xml -> xsd -> classes" war für mich, dass sie nur einen Codeklumpen erzeugte, der völlig nicht zu warten war, und dass ich ihn schließlich auf den Rasen legte.

Es ist in keiner Weise elegant, aber es hat den Job für mich gemacht.

Sie können es hier bekommen: Bitte machen Sie Vorschläge, wenn es Ihnen gefällt.

SimpleXmlToCode

Talon
quelle
1
erzeugt falschen Code: // ELEMENTS [XmlIgnore] public DateTime Value {get; einstellen; } [XmlText] öffentlicher String ValueString {get {return Value? "wahr falsch"; } set {Value = value == "true"; }}
André Fiedler
Und die Konstruktoren sind unnötig + Sie sollten Kommentare für öffentlich sichtbare Mitglieder
André Fiedler
1
Zu meiner Verteidigung war es etwas, das ich sehr schnell zusammengeschlagen habe, was für mich funktioniert hat. Ich bin nicht darauf zurückgekommen, kann aber gerne Änderungen am Repo vornehmen.
Talon
Ich benutze dies seit einigen Monaten - es ist nicht perfekt, aber es ist sehr nützlich und ich finde, dass es viel besser lesbares / einfacheres XML generiert als das Einfügen von VS2013 als XML. Sehr geschätzter Talon.
Codechinchilla
6

Sie sollten svcutil berücksichtigen ( svcutil Frage )

Sowohl xsd.exe als auch svcutil arbeiten mit der XML-Schemadatei (.xsd). Ihr XML muss einer Schemadatei entsprechen, die von einem dieser beiden Tools verwendet werden kann.

Beachten Sie, dass hierfür auch verschiedene Tools von Drittanbietern vorhanden sind.

ng5000
quelle
3

Sie können xsd verwenden, wie von Darin vorgeschlagen.

Darüber hinaus wird empfohlen, die Datei test.xsd zu bearbeiten, um ein vernünftigeres Schema zu erstellen.

type="xs:string"kann type="xs:int"für ganzzahlige Werte
minOccurs="0"geändert werden. kann geändert werden, minOccurs="1"wo das Feld benötigt wird.
maxOccurs="unbounded"kann geändert werden, maxOccurs="1"wo nur ein Element zulässig ist

Sie können erweiterte xsd-s erstellen, wenn Sie Ihre Daten weiter validieren möchten. Dies gibt Ihnen jedoch zumindest angemessene Datentypen in der generierten c #.

Albin Sunnanbo
quelle
1

Verwenden Sie die folgende Syntax, um eine Schemaklasse aus einer XSD-Datei zu erstellen.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Kiran.Bakwad
quelle
0

So konvertieren Sie XML in eine C # -Klasse:

  • Navigieren Sie zum Microsoft Visual Studio-Marktplatz: - https://marketplace.visualstudio.com
  • Geben Sie in die Suchleiste folgenden Text ein: - xml to class code tool
  • Laden Sie die App herunter, installieren Sie sie und verwenden Sie sie

Hinweis: Im Laufe der Zeit wird diese App möglicherweise ersetzt, aber es besteht die Möglichkeit, dass es ein anderes Tool gibt, das das Gleiche tut.

J Wood
quelle