Mencoba mengubah string JSON menjadi objek dalam C #. Menggunakan uji kasus yang sangat sederhana:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Masalahnya adalah bahwa route_list tidak pernah disetel; itu adalah objek yang tidak terdefinisi. Ada ide?
JavaScriptSerializer
lebih MS karena tidak akan menerima apa pun selain format JSON kustom WCF (misalnya bidang tanggal yang terlihat seperti tanggal tetapi tidak dikelilingi pada DATE () gagal total)Jawaban:
Sepertinya Anda mencoba deserialize ke objek mentah. Anda bisa membuat Kelas yang mewakili objek yang Anda konversi. Ini akan sangat berguna jika Anda berurusan dengan objek yang lebih besar atau String JSON.
Misalnya:
Maka kode deserialisasi Anda akan:
Informasi lebih lanjut dapat ditemukan dalam tutorial ini: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
sumber
Atau, Anda dapat menggunakan perpustakaan Newtownsoft.Json sebagai berikut:
Di mana
T
jenis objek Anda yang cocok dengan string JSON Anda.sumber
Anda mungkin tidak ingin hanya mendeklarasikan route_list sebagai
object
tipe. Itu tidak memiliki properti .test, jadi Anda benar-benar tidak akan mendapatkan objek yang bagus kembali. Ini adalah salah satu tempat di mana Anda akan lebih baik mendefinisikan kelas atau struct, atau menggunakan kata kunci dinamis.Jika Anda benar-benar ingin kode ini berfungsi seperti yang Anda miliki, Anda harus tahu bahwa objek yang dikembalikan oleh DeserializeObject adalah kamus umum string, objek. Berikut kode untuk melakukannya:
Jika Anda ingin menggunakan kata kunci dinamis, Anda dapat membaca caranya di sini .
Jika Anda mendeklarasikan kelas atau struct, Anda dapat memanggil Deserialize alih-alih DeserializeObject seperti:
sumber
object routes_list
. Gunakanvar
atau ulangi secara eksplisit dan nyatakan rute_list sebagai IDictionary <string, objek>.Menggunakan objek dinamis dengan JavaScriptSerializer.
sumber
Newtonsoft lebih cepat dari serializer skrip java. ... yang ini tergantung pada paket Newtonsoft NuGet, yang populer dan lebih baik daripada serializer default.
satu solusi kode baris.
sumber
Inilah kelas sederhana yang saya buat bersama-sama dari berbagai posting .... Ini telah diuji selama sekitar 15 menit, tetapi tampaknya berhasil untuk tujuan saya. Ini digunakan
JavascriptSerializer
untuk melakukan pekerjaan, yang dapat dirujuk di aplikasi Anda menggunakan info yang dirinci dalam posting ini .Kode di bawah ini dapat dijalankan di LinqPad untuk mengujinya dengan:
Semoga ini bisa membantu!
sumber
Anda dapat memenuhi kebutuhan Anda dengan mudah dengan menggunakan perpustakaan Newtonsoft.Json. Saya menuliskan satu contoh di bawah ini untuk melihatnya.
Kelas untuk jenis objek yang Anda terima:
Kode:
ini adalah cara yang sangat sederhana untuk mengurai json Anda.
sumber
Seperti kata tripletdad99
tetapi jika Anda tidak ingin membuat objek tambahan Anda dapat membuatnya dengan
Dictionary
sebaliknyasumber
tambahkan ddl ini ke referensi ke proyek Anda: System.Web.Extensions.dll
gunakan namespace ini: using System.Web.Script.Serialization;
sumber
Salin Json Anda dan tempel di kotak teks di json2csharp dan klik tombol Generate.
Kelas cs akan dibuat menggunakan file cs seperti di bawah ini
Di mana
RootObject
nama file cs yang dihasilkan ;sumber
Cara cepat dan mudah lain untuk mengotomatiskan langkah-langkah ini adalah dengan:
app.quicktype.io menghasilkan metode serialisasi berdasarkan Newtonsoft. Atau, sekarang Anda dapat menggunakan kode seperti:
WebClient client = WebClient baru ();
string myJSON = client.DownloadString (" https://URL_FOR_JSON.com/JSON_STUFF ");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject (myJSON);
sumber
Konversi string JSON menjadi objek dalam C #. Menggunakan test case di bawah ini ... ini bekerja untuk saya. Di sini " MenuInfo " adalah objek kelas C # saya.
sumber
Pertama, Anda harus memasukkan perpustakaan seperti:
sumber