Saya mencoba menggunakan API yang menggunakan struktur contoh berikut untuk json yang dikembalikan
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3545134,
"created_at":"2013-08-06T15:51:15-04:00",
"updated_at":"2013-08-06T15:51:15-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
},
{
"customer":{
"first_name":"Test",
"last_name":"Account2",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3570462,
"created_at":"2013-08-12T11:54:58-04:00",
"updated_at":"2013-08-12T11:54:58-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
}
]
JSON.net akan bekerja dengan baik dengan sesuatu seperti struktur berikut
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Tapi saya tidak tahu bagaimana membuatnya senang dengan struktur yang disediakan.
Menggunakan JsonConvert.DeserializeObject (konten) default menghasilkan jumlah Pelanggan yang benar tetapi semua data adalah null.
Melakukan sesuatu yang CustomerList (di bawah) akan menghasilkan pengecualian "Tidak dapat menghilangkan derialisasi array JSON saat ini"
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Pikiran?
Jawaban:
Anda dapat membuat model baru untuk Deserialize Json Anda
CustomerJson
:Dan Anda dapat menghilangkan derialisasi json Anda dengan mudah:
Semoga membantu!
Dokumentasi: Serialisasi dan Deserialisasi JSON
sumber
DeserializeObject()
lambat pada ponsel Android yang menjalankan ARM. Ada solusi yang lebih baik untuk kasus itu?JObject.Parse(json);
Bagi yang tidak ingin membuat model apapun, gunakan kode berikut:
Catatan: Ini tidak berfungsi untuk string JSON Anda . Ini bukan solusi umum untuk struktur JSON apa pun.
sumber
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
implementasi (3 dibandingkan dengan Daftar <Tuple>). Kedua, solusi Anda menyiratkan dua kunci berbeda - 1 untuk setiap kamus. Apa yang terjadi jika beberapa pelanggan memiliki nama depan yang sama? Tidak akan ada perbedaan pada tombol-tombol tersebut. Solusi Anda tidak mempertimbangkan konflik ini.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
akan berhasil. Rupanya itu tidak berhasilMenggunakan jawaban yang diterima, Anda harus mengakses setiap record dengan menggunakan
Customers[i].customer
, dan Anda memerlukanCustomerJson
kelas tambahan , yang sedikit mengganggu. Jika Anda tidak ingin melakukannya, Anda dapat menggunakan yang berikut ini:Perhatikan bahwa saya menggunakan
List<>
, bukan Array. Sekarang buat kelas berikut:sumber
Sedikit modifikasi pada apa yang disebutkan di atas. Format Json saya, yang memvalidasi adalah
Menggunakan respons AlexDev, saya melakukan Pendauran ini setiap anak, menciptakan pembaca darinya
sumber
Modifikasi lebih lanjut dari JC_VA, ambil apa yang dimilikinya, dan ganti MyModelConverter dengan ...
Ini harus bekerja untuk json
atau
keduanya akan diurai seolah-olah
sumber