Wygeneruj klasę C # z XML


Odpowiedzi:


338

Tak, używając 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'.

Notatki

Odpowiedź , jak zmiany w katalogu Developer wiersza polecenia do d: \ temp może być przydatna.

Jeśli generujesz klasy dla tablicy wielowymiarowej, w generatorze XSD.exe występuje błąd, ale istnieją obejścia .


18
Aby użyć, xsduruchom Wiersz polecenia programisty dla VS2013 w menu narzędzi.
Jess

13
xsd.exemożna znaleźć pod:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
ostrzegaj, jeśli masz duży złożony plik XML, wygenerowana klasa będzie tak brzydka, że ​​prawie nie będzie można jej użyć;)
Matthew Lock

3
Dla mnie xsd.exeznaleziono: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179

414

Jeśli pracujesz nad projektem .NET 4.5 w VS 2012 (lub nowszym), możesz po prostu wkleić plik XML jako klasy.

  1. Skopiuj zawartość pliku XML do schowka
  2. W edytorze wybierz miejsce, w którym chcesz wkleić swoje zajęcia
  3. Z menu wybierz EDIT > Paste Special > Paste XML As Classes

22
Chciałbym tylko wygenerować automatycznie zaimplementowane właściwości, tak jak w przypadku „Wklej JSON jako klasy”. Obecnie oznacza to wynik 6-krotnego rozdętego kodu, który jest znacznie trudniejszy do odczytania. Samo to niestety sprawia, że ​​szukam innego narzędzia.
Nicholas Petersen

1
Czy zostało to wykluczone z VS 2013?
Roger,

3
@Roger Nie korzystałem z VS 2013, ale myślę, że ta funkcja powinna tam być, upewnij się, że twój projekt jest skierowany do .NET 4.5 Framework
miszczu

2
Jest to znacznie szybsze niż xsd, ale wynik jest mniej więcej taki sam.
Jess

4
Jeśli nie masz resharper, użyj wyrażenia regularnego zamień na 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; }i `private \ w + \ w + Field; \ r \ n \ r \ n`
AlexDev

44

Na początku myślałem, że Specjalna Pasta była świętym Graalem! Ale potem spróbowałem, a moje włosy zrobiły się białe, jak w filmie Indiana Jones.

Ale teraz używam http://xmltocsharp.azurewebsites.net/ i teraz jestem tak młody jak zawsze.

Oto segment tego, co wygenerował:

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
Dane wyjściowe tego narzędzia są dobre, ale chcę tylko rzucić ostrzeżenie, aby nie przesyłać żadnych wrażliwych danych na tę stronę (lub inne w tym zakresie). Doceniam oferowaną usługę, ale nie ma polityki prywatności i nie ma pewności, że to, co wkleisz, nie zostanie zarejestrowane i sprawdzone itp.
SvenAelterman

2
Miałem plik xml, który ma pewne rekurencyjne relacje (być może nazywa się to relacją cykliczną, nie jestem pewien.) Inne zawiodły, ale xmltocsharp.azurewebsites.net odniosło duży sukces na tym xml.
Koray

4
@ D.Kermott dzięki za link do strony, rzuciłem na nią okiem i wygląda na to, że wykonuje znacznie lepszą pracę niż specjalne wklejanie, kod wygląda na czystszy, chociaż mój testowy xml stworzył więcej klas, to było dużo ładniejszy w użyciu.
Harag

Szkoda, że ​​odwraca kolejność zajęć (elementy zewnętrzne wymienione na końcu jako ostatnie)
Savage

22

Zdaję sobie sprawę, że jest to dość stary post i prawdopodobnie przeprowadziłeś się dalej.

Ale miałem taki sam problem jak ty, więc postanowiłem napisać własny program.

Problem z trasą „xml -> xsd -> klas” polegał na tym, że wygenerowałem kawałek kodu, który był całkowicie nie do utrzymania i ostatecznie go sfotografowałem.

Nie jest w żaden sposób elegancki, ale wykonał dla mnie pracę.

Możesz go pobrać tutaj: Jeśli podoba Ci się, proszę o sugestie.

SimpleXmlToCode


1
produkuje zły kod: // ELEMENTS [XmlIgnore] public DateTime Value {get; zestaw; } [XmlText] public string ValueString {get {return Value? "prawda fałsz"; } ustaw {Wartość = wartość == „prawda”; }}
André Fiedler

Konstruktorzy są niepotrzebni + należy dołączyć komentarze do publicznie widocznych członków
André Fiedler

1
W mojej obronie było to coś, co bardzo szybko spoliczkowałem, co zadziałało. Nie wróciłem do tego, ale mogę wnieść wkład w repozytorium wszelkich zmian.
Talon

Używam tego od kilku miesięcy - nie jest idealny, ale jest całkiem przydatny i uważam, że generuje znacznie bardziej czytelny / prostszy XML niż wklej VS2013 jako XML. Bardzo ceniony Talon.
codechinchilla

6

Powinieneś rozważyć svcutil ( pytanie svcutil )

Zarówno xsd.exe, jak i svcutil działają na pliku schematu XML (.xsd). Kod XML musi być zgodny z plikiem schematu, aby mógł być używany przez jedno z tych dwóch narzędzi.

Zauważ, że istnieją do tego różne narzędzia innych firm.


3

Możesz użyć xsd zgodnie z sugestią Darina.

Oprócz tego zaleca się edycję pliku test.xsd w celu stworzenia bardziej rozsądnego schematu.

type="xs:string"można zmienić type="xs:int"na wartości całkowite
minOccurs="0"można zmienić minOccurs="1"tam, gdzie wymagane jest pole,
maxOccurs="unbounded"można zmienić maxOccurs="1"tam, gdzie dozwolony jest tylko jeden element

Możesz utworzyć bardziej zaawansowane xsd-s, jeśli chcesz dalej sprawdzać poprawność swoich danych, ale da to przynajmniej rozsądne typy danych w wygenerowanym c #.


1

Użyj poniższej składni, aby utworzyć klasę schematu z pliku XSD.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\

0

Aby przekonwertować XML na klasę C #:

  • Przejdź do witryny Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • W pasku wyszukiwania wpisz tekst: - xml do narzędzia kodu klasy
  • Pobierz, zainstaluj i używaj aplikacji

Uwaga: w miarę upływu czasu ta aplikacja może zostać zastąpiona, ale są szanse, że będzie inne narzędzie, które robi to samo.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.