Otrzymuję ciągi XML przez gniazdo i chciałbym przekonwertować je na obiekty C #.
Wiadomości mają postać:
<msg>
<id>1</id>
<action>stop</action>
</msg>
Jestem nowy w .Net i nie jestem pewien najlepszych praktyk w tym zakresie. Wcześniej korzystałem z JAXB dla Javy i nie byłem pewien, czy istnieje coś podobnego, czy też byłoby inaczej.
c#
xml
xml-parsing
xml-serialization
Steve
źródło
źródło
Odpowiedzi:
Musisz użyć
xsd.exe
narzędzia instalowanego wraz z zestawem Windows SDK w katalogu podobnym do:I na komputerach 64-bitowych:
A na komputerach z systemem Windows 10:
Przy pierwszym uruchomieniu używasz
xsd.exe
i konwertujesz przykładowy plik XML na plik XSD (plik schematu XML):To daje ci
yourfile.xsd
, co w drugim kroku, możesz ponownie przekonwertować zaxsd.exe
pomocą klasy C #:To powinno dać ci plik,
yourfile.cs
który będzie zawierał klasę C #, której możesz użyć do deserializacji otrzymanego pliku XML - coś takiego:Powinien działać całkiem dobrze w większości przypadków.
Aktualizacja: serializator XML pobierze dowolny strumień jako dane wejściowe - strumień pliku lub pamięci będzie w porządku:
lub użyj StringReader:
źródło
Masz dwie możliwości.
Metoda 1. Narzędzie XSD
Załóżmy, że masz plik XML w tej lokalizacji
C:\path\to\xml\file.xml
Możesz go znaleźć w
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Lub jeśli masz system Windows 8, możesz po prostu zacząć pisać wiersz polecenia programisty na ekranie Startcd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
I to wszystko! Wygenerowałeś klasy C # z pliku xml w
C:\path\to\xml\file.cs
Metoda 2 - Wklej specjalnie
Wymagany program Visual Studio 2012+ z .Net Framework> = 4.5 jako celem projektu i zainstalowanym indywidualnym komponentem „Windows Communication Foundation”
Edit > Paste special > Paste XML As Classes
I to wszystko!
Stosowanie
Użycie tej klasy pomocniczej jest bardzo proste:
Wszystko, co musisz teraz zrobić, to:
źródło
Wypróbuj tę metodę, aby przekonwertować Xml na obiekt. Jest przeznaczony do tego, co robisz:
Zadzwoń, używając tego kodu:
źródło
Po prostu uruchom Visual Studio 2013 jako Administracja ... Skopiuj zawartość pliku Xml .. Przejdź do Visual Studio 2013> Edytuj> Wklej specjalnie> Wklej Xml jako klasy C # Stworzy on twoje klasy c # zgodnie z zawartością pliku Xml.
źródło
Na wypadek, gdyby ktoś uznał to za przydatne:
Możesz to nazwać za pomocą:
źródło
Możesz wygenerować klasę zgodnie z powyższym opisem lub napisać ją ręcznie:
Następnie możesz użyć ExtendedXmlSerializer do serializacji i deserializacji.
Instalacja Możesz zainstalować ExtendedXmlSerializer z nuget lub uruchomić następującą komendę:
Serializacja:
Deserializacja
Obsługa serializatora:
Obsługa ExtendedXmlSerializer .NET 4.5 lub nowszy i .NET Core . Możesz zintegrować go z WebApi i AspCore.
źródło
Za pomocą narzędzia xsd.exe można tworzyć klasy powiązane ze schematem w .Net, a następnie XmlSerializer w celu deserializacji ciągu: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx
źródło
Upraszczając świetną odpowiedź Damiana,
źródło
Użyj poniższej metody, aby przekonwertować ciąg XML na DTO przy użyciu JAXB
źródło
Jeśli masz xsd wiadomości xml, możesz wygenerować klasy c # za pomocą narzędzia .Net xsd.exe.
Tych klas .Net można następnie użyć do wygenerowania pliku XML.
źródło
Oprócz innych odpowiedzi tutaj możesz oczywiście użyć klasy XmlDocument do odczytu podobnego do DOM XML lub XmlReader , szybkiego czytnika tylko do przodu, aby zrobić to „ręcznie”.
źródło
Innym sposobem jest Zaawansowane generowanie klas xsd do c # Narzędzia: xsd2code.com. To narzędzie jest bardzo przydatne i wydajne. Ma o wiele więcej dostosowań niż narzędzie xsd.exe z Visual Studio. Xsd2Code ++ można dostosować do korzystania z list lub tablic i obsługuje duże schematy z dużą ilością instrukcji importu.
Uwaga niektórych funkcji,
źródło
Wiem, że to pytanie jest stare, ale natknąłem się na nie i mam inną odpowiedź niż cóż, wszyscy inni :-)
Zwykłym sposobem (jak wspomniano powyżej komentatorzy) jest wygenerowanie klasy i usunięcie serializacji pliku xml.
Ale ( uwaga: bezwstydny autopromocji tutaj ) właśnie opublikowała pakiet Nuget, tutaj , z którą nie trzeba. Po prostu idź:
To dosłownie tyle, nic więcej nie jest potrzebne. A co najważniejsze, jeśli twój xml się zmieni, twój obiekt również zmieni się automatycznie.
Jeśli wolisz pobrać dll bezpośrednio, strona github jest tutaj .
źródło
źródło