Saya menerima string XML melalui soket, dan ingin mengubahnya menjadi objek C #.
Pesannya berupa:
<msg>
<id>1</id>
<action>stop</action>
</msg>
Saya baru mengenal .Net, dan tidak yakin praktik terbaik untuk melakukan ini. Saya telah menggunakan JAXB untuk Java sebelumnya, dan tidak yakin apakah ada sesuatu yang serupa, atau apakah ini akan ditangani dengan cara yang berbeda.
c#
xml
xml-parsing
xml-serialization
Steve
sumber
sumber
Jawaban:
Anda perlu menggunakan
xsd.exe
alat yang terinstal dengan Windows SDK ke direktori yang mirip dengan:Dan pada komputer 64-bit:
Dan pada komputer Windows 10:
Pada percobaan pertama, Anda menggunakan
xsd.exe
dan Anda mengonversi sampel XML Anda menjadi file XSD (file skema XML):Ini memberi Anda
yourfile.xsd
, yang pada langkah kedua, Anda dapat mengkonversi lagi menggunakanxsd.exe
kelas C #:Ini akan memberi Anda file
yourfile.cs
yang akan berisi kelas C # yang dapat Anda gunakan untuk menghapus deserialisasi file XML yang Anda peroleh - sesuatu seperti:Harus bekerja dengan cukup baik untuk sebagian besar kasus.
Pembaruan: serializer XML akan mengambil aliran apa pun sebagai input - baik file atau aliran memori akan baik-baik saja:
atau gunakan StringReader:
sumber
Anda memiliki dua kemungkinan.
Metode 1. Alat XSD
Misalkan Anda memiliki file XML di lokasi ini
C:\path\to\xml\file.xml
Anda dapat menemukannya di
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Atau jika Anda memiliki Windows 8 dapat mulai mengetik Prompt Perintah Pengembang di layar Mulaicd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
Dan itu dia! Anda telah menghasilkan kelas C # dari file xml di
C:\path\to\xml\file.cs
Metode 2 - Tempel khusus
Diperlukan Visual Studio 2012+ dengan .Net Framework> = 4.5 sebagai target proyek dan komponen individual 'Windows Communication Foundation' diinstal
Edit > Paste special > Paste XML As Classes
Dan itu dia!
Pemakaian
Penggunaan sangat sederhana dengan kelas pembantu ini:
Yang harus Anda lakukan sekarang adalah:
sumber
Coba metode ini untuk Mengonversi Xml ke objek. Itu dibuat untuk apa yang Anda lakukan:
Sebut saja menggunakan kode ini:
sumber
Cukup Jalankan Visual Studio 2013 Anda sebagai Administrasi ... Salin konten file Xml Anda .. Buka Visual Studio 2013> Edit> Tempel Spesial> Tempel Xml sebagai Kelas C # Ini akan membuat kelas c # Anda sesuai dengan konten file Xml Anda.
sumber
Untuk berjaga-jaga kalau ada yang mungkin menemukan ini berguna:
Anda dapat menyebutnya menggunakan:
sumber
Anda dapat membuat kelas seperti yang dijelaskan di atas, atau menulisnya secara manual:
Kemudian Anda dapat menggunakan ExtendedXmlSerializer untuk membuat serial dan deserialize.
Instalasi Anda dapat menginstal ExtendedXmlSerializer dari nuget atau menjalankan perintah berikut:
Serialisasi:
Deserialisasi
Dukungan serializer ini:
ExtendedXmlSerializer mendukung .NET 4.5 atau lebih tinggi dan .NET Core . Anda dapat mengintegrasikannya dengan WebApi dan AspCore.
sumber
Anda bisa menggunakan xsd.exe untuk membuat kelas skema terikat di .Net lalu XmlSerializer untuk Deserialize the string: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.deserialize.aspx
sumber
Menyederhanakan jawaban hebat Damian,
sumber
Gunakan metode di bawah ini untuk mengonversi String XML ke DTO menggunakan JAXB
sumber
Jika Anda memiliki xsd dari pesan xml maka Anda dapat membuat kelas c # menggunakan alat .Net xsd.exe.
Kelas .Net ini kemudian dapat digunakan untuk menghasilkan xml.
sumber
Selain jawaban lain di sini, Anda secara alami dapat menggunakan kelas XmlDocument , untuk membaca XML DOM, atau XmlReader , pembaca hanya-maju cepat, untuk melakukannya "dengan tangan".
sumber
Cara lain dengan Advanced Generasi xsd ke c # kelas: xsd2code.com. Alat ini sangat berguna dan kuat. Ini memiliki lebih banyak penyesuaian daripada alat xsd.exe dari Visual Studio. Xsd2Code ++ dapat dikustomisasi untuk menggunakan Daftar atau Array dan mendukung skema besar dengan banyak pernyataan Impor.
Catatan beberapa fitur,
sumber
Saya tahu pertanyaan ini sudah lama, tetapi saya tersandung ke dalamnya dan saya memiliki jawaban yang berbeda dari, well, orang lain :-)
Cara yang biasa (seperti yang disebutkan oleh komentator di atas) adalah membuat kelas dan menghapus serial xml Anda.
Tapi ( peringatan: promosi diri yang tak tahu malu di sini ) saya baru saja menerbitkan paket nuget, di sini Anda tidak perlu melakukannya. Anda hanya pergi:
Itu benar-benar itu, tidak ada yang dibutuhkan. Dan, yang paling penting, jika xml Anda berubah, objek Anda juga berubah secara otomatis.
Jika Anda lebih suka mengunduh dll secara langsung, halaman github ada di sini .
sumber
sumber