Hasilkan kelas C # dari XML

Jawaban:

338

Ya, dengan menggunakan 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'.

Catatan

Jawab bagaimana mengubah direktori di Command Command Prompt ke d: \ temp semoga bermanfaat.

Jika Anda membuat kelas untuk array multi-dimensi, ada bug di generator XSD.exe, tetapi ada solusinya .

Darin Dimitrov
sumber
18
Untuk menggunakan xsdjalankan Perintah Pengembang untuk VS2013 di bawah menu alat Anda.
Jess
13
xsd.exedapat ditemukan di bawah:C:\Program Files (x86)\Microsoft SDKs\Windows
Julian
7
diperingatkan jika Anda memiliki file XML kompleks yang besar, kelas yang dihasilkan akan sangat jelek sehingga hampir tidak dapat digunakan;)
Matthew Lock
3
Bagi saya xsd.exeditemukan di: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
user1991179
413

Jika Anda sedang mengerjakan proyek .NET 4.5 di VS 2012 (atau lebih baru), Anda bisa menempelkan file XML Anda sebagai kelas.

  1. Salin konten file XML Anda ke clipboard
  2. Di editor, pilih tempat yang Anda inginkan untuk menempelkan kelas Anda
  3. Dari menu, pilih EDIT > Paste Special > Paste XML As Classes
miszczu
sumber
22
Saya hanya berharap properti yang diimplementasikan secara otomatis ini dihasilkan, seperti halnya untuk "Tempel JSON sebagai Kelas". Saat ini ini berarti hasil kode 6 kali lipat, yang jauh lebih sulit dibaca. Ini saja membuat saya mencari alat lain, sayangnya.
Nicholas Petersen
1
Apakah ini tertinggal dari VS 2013?
Roger
3
@ Roger Saya belum pernah menggunakan VS 2013, tapi saya pikir fitur ini harus ada di sana, pastikan proyek Anda menargetkan .NET 4.5 Framework
miszczu
2
Ini jauh lebih cepat daripada xsd, tetapi hasilnya hampir sama.
Jess
4
Jika Anda tidak memiliki regharper, gunakan regex, ganti dengan 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; }dan `private \ w + \ w + Field; \ r \ n \ r \ n`
AlexDev
44

Awalnya saya pikir Pasta Spesial adalah cawan suci! Tapi kemudian saya mencobanya dan rambut saya memutih seperti film Indiana Jones.

Tapi sekarang saya menggunakan http://xmltocsharp.azurewebsites.net/ dan sekarang saya semuda dulu.

Berikut adalah segmen dari apa yang dihasilkannya:

namespace Xml2CSharp
{
    [XmlRoot(ElementName="entry")]
    public class Entry {
        [XmlElement(ElementName="hybrisEntryID")]
        public string HybrisEntryID { get; set; }
        [XmlElement(ElementName="mapicsLineSequenceNumber")]
        public string MapicsLineSequenceNumber { get; set; }
D. Kermott
sumber
5
Output dari alat ini bagus, tapi saya hanya ingin membuat peringatan agar tidak mengirimkan data sensitif ke situs ini (atau yang lainnya dalam hal ini). Sementara saya menghargai layanan yang ditawarkan, tidak ada kebijakan privasi dan sedikit atau tidak ada jaminan bahwa apa yang Anda tempel tidak akan dicatat dan diperiksa, dll.
SvenAelterman
2
Saya punya file xml yang memiliki beberapa hubungan rekursif (mungkin itu disebut hubungan melingkar, saya tidak yakin.) Yang lain gagal tetapi xmltocsharp.azurewebsites.net sangat sukses pada xml itu.
Koray
4
@ D.Kermott terima kasih atas tautan situs webnya, saya sudah melihatnya dengan cepat dan sepertinya itu melakukan pekerjaan yang jauh lebih baik daripada tempel khusus, kodenya terlihat lebih bersih, meskipun pengujian saya xml menciptakan lebih banyak kelas, itu jauh lebih bagus untuk digunakan.
Harag
Sayang rasanya membalikkan urutan kelas (elemen luar terdaftar terakhir)
Savage
22

Saya menyadari bahwa ini adalah pos yang agak lama dan Anda mungkin telah pindah.

Tetapi saya memiliki masalah yang sama dengan Anda sehingga saya memutuskan untuk menulis program saya sendiri.

Masalah dengan rute "xml -> xsd -> kelas" bagi saya adalah bahwa itu hanya menghasilkan benjolan kode yang benar-benar tidak dapat dipelihara dan akhirnya saya turfing itu.

Ini sama sekali tidak elegan tetapi itu berhasil bagi saya.

Anda bisa mendapatkannya di sini: Silakan buat saran jika Anda suka.

SimpleXmlToCode

Cakar
sumber
1
menghasilkan kode yang salah: // ELEMENTS [XmlIgnore] public DateTime Value {get; set; } [XmlText] string publik ValueString {get {return Value? "benar salah"; } set {Value = value == "true"; }}
André Fiedler
Dan konstruktor tidak perlu + Anda harus memasukkan komentar untuk anggota yang dapat dilihat oleh publik
André Fiedler
1
Dalam pembelaan saya, itu adalah sesuatu yang saya pukul dengan sangat cepat yang bekerja untuk saya. Saya belum kembali ke sana tetapi merasa bebas untuk berkontribusi pada repo setiap perubahan.
Talon
Saya telah menggunakan ini selama beberapa bulan - ini tidak sempurna, tapi ini cukup berguna dan saya menemukan ini menghasilkan XML yang lebih mudah dibaca / lebih sederhana daripada pasta VS2013 sebagai XML. Talon sangat dihargai.
codechinchilla
6

Anda harus mempertimbangkan svcutil ( pertanyaan svcutil )

Baik xsd.exe dan svcutil beroperasi pada file skema XML (.xsd). XML Anda harus sesuai dengan file skema yang akan digunakan oleh salah satu dari kedua alat ini.

Perhatikan bahwa berbagai alat pihak ke-3 juga ada untuk ini.

ng5000
sumber
3

Anda dapat menggunakan xsd seperti yang disarankan oleh Darin.

Selain itu, disarankan untuk mengedit file test.xsd untuk membuat skema yang lebih masuk akal.

type="xs:string"dapat diubah menjadi type="xs:int"untuk nilai integer
minOccurs="0"dapat diubah ke minOccurs="1"tempat bidang diperlukan
maxOccurs="unbounded"dapat diubahmaxOccurs="1" tempat hanya satu item diperbolehkan

Anda dapat membuat xsd-s lebih lanjut jika Anda ingin memvalidasi data Anda lebih lanjut, tetapi ini setidaknya akan memberi Anda tipe data yang masuk akal dalam c # yang dihasilkan.

Albin Sunnanbo
sumber
1

Gunakan sintaksis di bawah ini untuk membuat kelas skema dari file XSD.

C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Kiran.Bakwad
sumber
0

Untuk mengonversi XML menjadi Kelas C #:

  • Navigasikan ke Microsoft Visual Studio Marketplace: - https://marketplace.visualstudio.com
  • Di bilah pencarian masukkan teks: - xml ke alat kode kelas
  • Unduh, instal, dan gunakan aplikasi

Catatan: dalam waktu yang penuh, aplikasi ini dapat diganti, tetapi kemungkinan besar, akan ada alat lain yang melakukan hal yang sama.

J Wood
sumber