Saya mencoba untuk membatalkan deserialisasi panggilan Graph API teman Facebook ke daftar objek. Objek JSON terlihat seperti:
{"data":[{"id":"518523721","name":"ftyft"},
{"id":"527032438","name":"ftyftyf"},
{"id":"527572047","name":"ftgft"},
{"id":"531141884","name":"ftftft"},
{"id":"532652067","name"...
List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);
Ini tidak berfungsi, karena objek primitif tidak valid. Bagaimana saya bisa membatalkan deserialisasi ini?
Dictionary<string,string>
, periksa: stackoverflow.com/questions/7699972/…Jawaban:
Anda perlu membuat struktur seperti ini:
Maka Anda harus dapat melakukan:
Nama-nama kelas saya hanyalah sebuah contoh. Anda harus menggunakan nama yang benar.
Menambahkan tes sampel:
Menghasilkan:
sumber
Terkadang saya lebih suka objek dinamis:
sumber
Cara terbaik untuk membuat kelas-kelas ini secara otomatis untuk Anda adalah dengan menyalin output JSON Anda dan melemparkannya ke sini:
http://json2csharp.com/
Ini akan memberi Anda titik awal untuk menyentuh kelas Anda untuk deserialisasi.
sumber
Sangat mudah kita dapat mem-parsing konten JSON dengan bantuan kamus dan JavaScriptSerializer. Berikut adalah contoh kode yang digunakan untuk mengurai konten JSON dari file ashx.
sumber
Newtonsoft.JSON
adalah solusi yang bagus untuk situasi seperti ini. JugaNewtonsof.JSON
lebih cepat dari yang lain, sepertiJavaScriptSerializer
,DataContractJsonSerializer
.Dalam sampel ini, Anda dapat mengikuti:
Kemudian Anda dapat menggunakan jsonData
JArray
, dan Anda dapat menggunakan afor
loop untuk mendapatkan data di setiap iterasi.Saya juga ingin menambahkan sesuatu:
Bekerja dengan objek dinamis dan menggunakan serialize Newtonsoft adalah pilihan yang baik.
sumber
Saya setuju dengan Icarus (akan berkomentar jika saya bisa), tetapi alih-alih menggunakan kelas CustomObject , saya akan menggunakan Kamus (kalau-kalau Facebook menambahkan sesuatu).
atau
sumber
public IList<IDictionary<string, dynmaic>> data { get; set; }
Serialisasi:
Deserialisasi ::
Untuk menghilangkan bakteri objek dinamis
sumber
Anda dapat menggunakan ekstensi ini
sumber
Berikut ini adalah situs lain yang akan membantu Anda dengan semua kode yang Anda butuhkan selama Anda memiliki string JSON yang diformat dengan benar:
https://app.quicktype.io/
sumber
Jika Anda menggunakan .NET Core 3.0, Anda dapat menggunakan System.Text.Json (yang sekarang sudah ada di dalamnya) untuk membatalkan deserialisasi JSON.
Langkah pertama adalah membuat kelas untuk memodelkan JSON. Ada banyak alat yang dapat membantu dengan ini, dan beberapa jawaban di sini mencantumkannya.
Beberapa opsi adalah http://json2csharp.com , http://app.quicktype.io , atau menggunakan Visual Studio (menu Edit → Tempel Spesial → Tempel JSON sebagai kelas ).
Kemudian Anda dapat deserialize menggunakan:
Jika Anda perlu menambahkan pengaturan, seperti
camelCase
penanganan, kemudian meneruskan pengaturan serializer ke deserializer seperti ini:sumber