Kann ich aus einer XML-Datei eine C # -Klasse generieren?
Kann ich aus einer XML-Datei eine C # -Klasse generieren?
Antworten:
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 .
xsd
die ausführen Entwickler Eingabeaufforderung für VS2013 unter dem Tools - Menü.
xsd.exe
finden Sie unter:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
wurde gefunden bei: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Wenn Sie auf .NET 4.5 Projekt in VS 2012 (oder neuer) arbeiten, können Sie einfach einfügen Ihre XML - Datei als Klassen.
EDIT > Paste Special > Paste XML As Classes
xsd
, aber die Ausgabe ist ungefähr gleich.
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`
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; }
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.
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.
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 #.
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\
So konvertieren Sie XML in eine C # -Klasse:
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.