Bisakah saya menghasilkan kelas C # dari file XML?
Bisakah saya menghasilkan kelas C # dari file XML?
Jawaban:
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 .
xsd
jalankan Perintah Pengembang untuk VS2013 di bawah menu alat Anda.
xsd.exe
dapat ditemukan di bawah:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
ditemukan di: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Jika Anda sedang mengerjakan proyek .NET 4.5 di VS 2012 (atau lebih baru), Anda bisa menempelkan file XML Anda sebagai kelas.
EDIT > Paste Special > Paste XML As Classes
xsd
, tetapi hasilnya hampir sama.
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`
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; }
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.
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.
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.
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\
Untuk mengonversi XML menjadi Kelas C #:
Catatan: dalam waktu yang penuh, aplikasi ini dapat diganti, tetapi kemungkinan besar, akan ada alat lain yang melakukan hal yang sama.