Genera classe C # da XML


Risposte:


338

Sì, utilizzando 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'.

Appunti

Rispondi come modificare la directory nel Prompt dei comandi per gli sviluppatori in d: \ temp può essere utile.

Se si generano classi per array multidimensionali, è presente un bug nel generatore XSD.exe, ma esistono soluzioni alternative .


18
Per utilizzare xsdeseguire il Prompt dei comandi per sviluppatori per VS2013 nel menu Strumenti.
Jess,

13
xsd.exepuò essere trovato sotto:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian

7
tieni presente che se hai un grande file XML complesso la classe generata sarà così brutta da essere quasi inutilizzabile;)
Matthew Lock,

3
Per me è xsd.exestato trovato: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179

414

Se stai lavorando su un progetto .NET 4.5 in VS 2012 (o più recente), puoi semplicemente incollare il tuo file XML come classi.

  1. Copia il contenuto del tuo file XML negli appunti
  2. Nell'editor, selezionare il punto in cui si desidera incollare le lezioni
  3. Dal menu, selezionare EDIT > Paste Special > Paste XML As Classes

22
Vorrei solo che questo generasse proprietà auto-implementate, come fa per "Incolla JSON come classi". Attualmente questo significa un risultato di codice gonfiato di 6 volte, che è molto più difficile da leggere. Questo da solo mi fa cercare un altro strumento, sfortunatamente.
Nicholas Petersen,

1
È stato lasciato fuori da VS 2013?
Roger,

3
@Roger Non ho usato VS 2013, ma penso che questa funzione dovrebbe essere presente, assicurati che il tuo progetto sia mirato a .NET 4.5 Framework
miszczu

2
Questo è molto più veloce di xsd, ma l'output è più o meno lo stesso.
Jess,

4
Se non hai il resharper usa regex sostituisci con 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; }e `private \ w + \ w + Field; \ r \ n \ r \ n`
AlexDev

44

All'inizio pensavo che lo speciale pasta fosse il santo graal! Ma poi l'ho provato e i miei capelli sono diventati bianchi proprio come il film di Indiana Jones.

Ma ora uso http://xmltocsharp.azurewebsite.net/ e ora sono più giovane che mai.

Ecco un segmento di ciò che ha generato:

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
L'output di questo strumento è buono, ma voglio solo lanciare una parola di attenzione là fuori per non inviare dati sensibili a questo sito (o qualsiasi altro per quello). Anche se apprezzo il servizio offerto, non esiste alcuna politica sulla privacy e poca o nessuna garanzia che ciò che si incolla non verrà registrato ed esaminato, ecc.
SvenAelterman

2
Ho avuto un file xml che ha alcune relazioni ricorsive (forse si chiama relazione circolare, non ne sono sicuro.) Gli altri hanno fallito, ma xmltocsharp.azurewebsite.net ha avuto molto successo su quel xml.
Koray,

4
@ D.Kermott grazie per il link al sito Web, ho dato una rapida occhiata a questo e sembra che faccia un lavoro molto migliore rispetto allo speciale incolla, il codice sembra più pulito, anche se il mio test xml ha creato più classi, era molto più bello da usare.
Harag,

Peccato che sembra invertire l'ordine delle classi (elementi esterni elencati per ultimi)
Savage

22

Mi rendo conto che questo è un post piuttosto vecchio e probabilmente sei passato oltre.

Ma ho avuto lo stesso problema, quindi ho deciso di scrivere il mio programma.

Il problema con il percorso "xml -> xsd -> classes" per me era che generava solo un grumo di codice che era completamente irraggiungibile e alla fine ho finito per modificarlo.

Non è in alcun modo elegante ma ha fatto il lavoro per me.

Puoi ottenerlo qui: ti preghiamo di dare suggerimenti se ti piace.

SimpleXmlToCode


1
produce un codice errato: // ELEMENTS [XmlIgnore] Public DateTime Value {get; impostato; } [XmlText] stringa pubblica ValueString {get {return Value? "vero falso"; } set {Value = value == "true"; }}
André Fiedler,

E i costruttori non sono necessari + dovresti includere commenti per i membri visibili pubblicamente
André Fiedler

1
A mia difesa, è stato qualcosa che ho schiaffeggiato molto rapidamente che ha funzionato per me. Non ci sono tornato ma mi sento libero di contribuire al repository di eventuali modifiche.
Talon,

Lo sto usando da alcuni mesi - non è perfetto, ma è abbastanza utile e trovo che generi XML molto più leggibile / più semplice rispetto all'incolla di VS2013 come XML. Talon molto apprezzato.
codechinchilla,

6

Dovresti considerare svcutil ( domanda svcutil )

Sia xsd.exe che svcutil operano sul file di schema XML (.xsd). Il tuo XML deve essere conforme a un file di schema per essere utilizzato da uno di questi due strumenti.

Si noti che esistono anche vari strumenti di terze parti per questo.


3

Puoi usare xsd come suggerito da Darin.

Inoltre, si consiglia di modificare il file test.xsd per creare uno schema più ragionevole.

type="xs:string"può essere modificato in type="xs:int"per i valori interi
minOccurs="0"può essere modificato minOccurs="1"dove è richiesto il campo
maxOccurs="unbounded"può essere modificato in maxOccurs="1"cui è consentito un solo elemento

Puoi creare xsd-s più avanzati se vuoi convalidare ulteriormente i tuoi dati, ma questo ti darà almeno ragionevoli tipi di dati nel c # generato.


1

Utilizzare la sintassi seguente per creare la classe dello schema dal file XSD.

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

0

Per convertire XML in una classe C #:

  • Passare al mercato di Microsoft Visual Studio: - https://marketplace.visualstudio.com
  • Nella barra di ricerca inserisci il testo: - XML ​​per lo strumento codice classe
  • Scarica, installa e usa l'app

Nota: nella pienezza dei tempi, questa app potrebbe essere sostituita, ma è probabile che ci sarà un altro strumento che fa la stessa cosa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.