Ich empfange XML-Zeichenfolgen über einen Socket und möchte diese in C # -Objekte konvertieren.
Die Nachrichten haben die Form:
<msg>
<id>1</id>
<action>stop</action>
</msg>
Ich bin neu in .Net und bin mir nicht sicher, wie ich dies am besten durchführen kann. Ich habe JAXB für Java bereits verwendet und war mir nicht sicher, ob es etwas Ähnliches gibt oder ob dies anders gehandhabt wird.
c#
xml
xml-parsing
xml-serialization
Steve
quelle
quelle
Antworten:
Sie müssen das
xsd.exe
Tool, das mit dem Windows SDK installiert wird, in einem ähnlichen Verzeichnis verwenden:Und auf 64-Bit-Computern:
Und auf Windows 10-Computern:
Beim ersten Durchlauf verwenden
xsd.exe
Sie Ihr Beispiel-XML und konvertieren es in eine XSD-Datei (XML-Schemadatei):Dies gibt Ihnen
yourfile.xsd
, was Sie in einem zweiten Schritt erneut mitxsd.exe
in eine C # -Klasse konvertieren können :Dies sollte Ihnen eine Datei
yourfile.cs
geben, die eine C # -Klasse enthält, mit der Sie die XML-Datei, die Sie erhalten, deserialisieren können - etwa:Sollte in den meisten Fällen ziemlich gut funktionieren.
Update: Der XML-Serializer nimmt jeden Stream als Eingabe - entweder eine Datei oder ein Speicher-Stream ist in Ordnung:
oder verwenden Sie einen StringReader:
quelle
Sie haben zwei Möglichkeiten.
Methode 1. XSD- Tool
Angenommen, Sie haben Ihre XML-Datei an diesem Speicherort
C:\path\to\xml\file.xml
Sie finden sie in.
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Wenn Sie Windows 8 verwenden, können Sie einfach die Eingabeaufforderung für Entwickler in den Startbildschirm eingebencd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
Und das ist es! Sie haben C # -Klassen aus der XML-Datei in generiert
C:\path\to\xml\file.cs
Methode 2 - Spezial einfügen
Erforderliches Visual Studio 2012+ mit .Net Framework> = 4.5 als Projektziel und installierter einzelner Komponente von 'Windows Communication Foundation'
Edit > Paste special > Paste XML As Classes
Und das ist es!
Verwendung
Die Verwendung dieser Hilfsklasse ist sehr einfach:
Jetzt müssen Sie nur noch Folgendes tun:
quelle
Versuchen Sie diese Methode, um XML in ein Objekt zu konvertieren. Es ist genau für das gemacht, was Sie tun:
Nennen Sie es mit diesem Code:
quelle
Führen Sie einfach Visual Studio 2013 als Administration aus ... Kopieren Sie den Inhalt Ihrer XML-Datei. Gehen Sie zu Visual Studio 2013> Bearbeiten> Inhalte einfügen> XML als C # -Klassen einfügen. Dadurch werden Ihre C # -Klassen entsprechend dem Inhalt Ihrer XML-Datei erstellt.
quelle
Nur für den Fall, dass jemand dies nützlich finden könnte:
Sie können es aufrufen mit:
quelle
Sie können eine Klasse wie oben beschrieben generieren oder manuell schreiben:
Anschließend können Sie ExtendedXmlSerializer zum Serialisieren und Deserialisieren verwenden.
Installation Sie können ExtendedXmlSerializer von Nuget installieren oder den folgenden Befehl ausführen:
Serialisierung:
Deserialisierung
Diese Serializer-Unterstützung:
ExtendedXmlSerializer unterstützt .NET 4.5 oder höher und .NET Core . Sie können es in WebApi und AspCore integrieren.
quelle
Sie können xsd.exe verwenden, um schemagebundene Klassen in .Net und dann in XmlSerializer zu erstellen, um die Zeichenfolge zu deserialisieren: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx
quelle
Damians großartige Antwort vereinfachen,
quelle
Verwenden Sie die folgende Methode, um XML-Zeichenfolgen mit JAXB in DTO zu konvertieren
quelle
Wenn Sie die xsd der xml-Nachricht haben, können Sie mit dem Tool .Net xsd.exe c # -Klassen generieren.
Diese .Net-Klassen können dann zum Generieren der XML verwendet werden.
quelle
Zusätzlich zu den anderen Antworten hier können Sie natürlich die XmlDocument- Klasse zum Lesen von XML- DOMs oder den XmlReader -Reader nur für den schnellen Vorlauf verwenden, um dies "von Hand" zu tun.
quelle
Eine andere Möglichkeit mit einem erweiterten Tool zur Generierung von xsd zu c # -Klassen: xsd2code.com. Dieses Tool ist sehr praktisch und leistungsstark. Es hat viel mehr Anpassungsmöglichkeiten als das Tool xsd.exe von Visual Studio. Xsd2Code ++ kann für die Verwendung von Listen oder Arrays angepasst werden und unterstützt große Schemas mit vielen Importanweisungen.
Hinweis auf einige Funktionen,
quelle
Ich weiß, dass diese Frage alt ist, aber ich bin darauf gestoßen und habe eine andere Antwort als alle anderen :-)
Der übliche Weg (wie in den obigen Kommentaren erwähnt) besteht darin, eine Klasse zu generieren und Ihre XML-Datei zu de-serialisieren.
Aber ( Warnung: schamlose Eigenwerbung hier ) ich nur ein nuget Paket veröffentlicht, hier , mit denen Sie nicht zu. Du gehst einfach:
Das ist es buchstäblich, nichts anderes benötigt. Und vor allem, wenn sich Ihre XML-Datei ändert, ändert sich auch Ihr Objekt automatisch.
Wenn Sie es vorziehen , die DLL direkt zum Download, ist die Github Seite hier .
quelle
quelle