Saya memiliki kode berikut:
var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);
Input in responsecontent
adalah JSON, tetapi tidak diuraikan dengan benar ke dalam objek. Bagaimana saya harus deserialize dengan benar?
Json
diSystem.Web.Helpers
, adaJsonQueryStringConverter
diSystem.ServiceModel.Web
, adaJavascriptSerializer
diSystem.Web.Script.Serialization
,DataContractJsonSerializer
diSystem.Runtime.Serialization.Json
, sih MS bahkan telah memutuskan untuk memasukkan pihak ketigaJson.NET
dalam API Web ASP.NET. Jika Anda berpikir itu tidak cukup, MS akan munculSystem.Json
tetapi saat ini tidak layak untuk dikonsumsi. Cara untuk pergi Microsoft cara untuk pergi .... Saya memilih oleh namespace yang paling tampan.JsonValue
diWindows.Data.Json
yang hanya untuk Windows 8 dan di atas. Saya menyukainya. MS ada dalam misi :)Jawaban:
Saya berasumsi Anda tidak menggunakan Json.NET (paket NewGamesoft.Json NuGet). Jika ini masalahnya, maka Anda harus mencobanya.
Ini memiliki beberapa fitur berikut:
Lihatlah contoh di bawah ini. Dalam contoh ini,
JsonConvert
kelas digunakan untuk mengonversi objek ke dan dari JSON. Ini memiliki dua metode statis untuk tujuan ini. Mereka adalahSerializeObject(Object obj)
danDeserializeObject<T>(String json)
:sumber
var
variabel tipe, jika saya tidak tahu struktur lengkap dari tujuan saya? Secara khusus, saya mengkonsumsi Rally User Stories, dan saya ingin mengubahnya menjadi objek.JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiry
mengembalikan string"2008-12-28T00:00:00"
, bukan tanggal. dapat berubah menjadi suatuDate
melaluinew Date(str)
, tetapiJSON.parse
tahu apa-apa tentang tanggal. Anda harus meneruskan sebuah reviver yang memeriksa setiap nilai string terhadap suatu pola.require
,include
,import
atauusing
pernyataan dalam jawaban mereka. Apakah satu baris itu sakit?Seperti yang dijawab di sini - Deserialize JSON menjadi objek dinamis C #?
Ini cukup sederhana menggunakan Json.NET:
Atau menggunakan Newtonsoft.Json.Linq:
sumber
object
, dan Anda tidak bisa menggunakan pengindeksan pada aobject
.Berikut adalah beberapa opsi tanpa menggunakan perpustakaan pihak ketiga:
Lihat tautan untuk informasi lebih lanjut tentang System.Web.Helpers.Json .
Pembaruan : Saat ini cara termudah untuk mendapatkannya
Web.Helpers
adalah dengan menggunakan paket NuGet .Jika Anda tidak peduli dengan versi windows sebelumnya, Anda bisa menggunakan kelas
Windows.Data.Json
namespace:sumber
Jika .NET 4 tersedia untuk Anda, lihat: http://visitmix.com/writings/the-rise-of-json (archive.org)
Berikut cuplikan dari situs itu:
Konsol terakhir itu. Menulis Baris cukup manis ...
sumber
Solusi asli lain untuk ini, yang tidak memerlukan perpustakaan pihak ke-3 tetapi referensi ke System.Web.Extensions adalah JavaScriptSerializer. Ini bukan fitur bawaan yang baru tetapi sangat tidak dikenal di sana sejak 3.5.
..
dan kembali
sumber
Anda juga dapat melihat DataContractJsonSerializer
sumber
System.Json bekerja sekarang ...
Instal nuget https://www.nuget.org/packages/System.Json
Sampel :
sumber
Gunakan alat ini untuk menghasilkan kelas yang berbasis di json Anda:
http://json2csharp.com/
Dan kemudian gunakan kelas untuk deserialize json Anda. Contoh:
Referensi: https://forums.asp.net/t/1992996.aspx?Nested+Json+Deserialization+to+C+object+and+using+that+object https://www.newtonsoft.com/json/help /html/DeserializeObject.htm
sumber
Coba kode berikut:
sumber
System.Text.Json
.NET core 3.0 hadir dengan
System.Text.Json
built-in yang artinya Anda dapat membatalkan deserialisasi / serialisasi JSON tanpa menggunakan pustaka pihak ketiga.Untuk membuat cerita bersambung kelas Anda ke string JSON:
Untuk membatalkan deserialisasi JSON menjadi kelas yang sangat diketik:
Jadi jika Anda memiliki kelas seperti di bawah ini:
Satu hal yang perlu diperhatikan adalah bahwa
System.Text.Json
tidak secara otomatis menanganicamelCase
properti JSON saat menggunakan kode Anda sendiri (namun, itu terjadi ketika menggunakan permintaan MVC / WebAPI dan pengikat model).Untuk mengatasi ini, Anda harus lulus
JsonSerializerOptions
sebagai parameter.System.Text.Json juga tersedia untuk .Net Framework dan .Net Standard sebagai paket Nu-get System.Text.Json
sumber
JsonDocument.Parse
.Berikut ini dari situs msdn yang menurut saya membantu memberikan beberapa fungsi asli untuk apa yang Anda cari. Harap dicatat itu ditentukan untuk Windows 8. Salah satu contoh dari situs tercantum di bawah ini.
Ini menggunakan namespace Windows.Data.JSON .
sumber
Anda dapat menggunakan perluasan berikut
sumber
Saya pikir jawaban terbaik yang pernah saya lihat adalah @MD_Sayem_Ahmed.
Pertanyaan Anda adalah "Bagaimana saya bisa mengurai Json dengan C #", tetapi sepertinya Anda ingin memecahkan kode Json. Jika Anda ingin memecahkan kode itu, jawaban Ahmed baik.
Jika Anda mencoba melakukan ini di ASP.NET Web Api, cara termudah adalah membuat objek transfer data yang menyimpan data yang ingin Anda tetapkan:
Anda cukup menambahkan header aplikasi / json ke permintaan Anda (jika Anda menggunakan Fiddler, misalnya). Anda kemudian akan menggunakan ini di ASP.NET Web API sebagai berikut:
Ini banyak membantu saya ketika saya bekerja di Web Api dan membuat hidup saya sangat mudah.
sumber
sumber
sumber
System.Web
referensi proyek Anda.sumber