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 .


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

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; }

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


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.


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 #.


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\

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.