Saya secara dinamis mengambil struktur JSON yang berbeda ke dalam berbagai struktur C#, menggunakan RestSharp dan IRestResponse<T> response = client.Execute<T>(request). Tapi, satu hasil JSON tertentu memberi saya masalah, di mana itu dimulai dan diakhiri dengan tanda kurung ...

JSON saya dimulai dan diakhiri dengan karakter "[" dan "]":

[
  {
    "first": "Adam",
    "last": "Buzzo"
  },
  {
    "first": "Jeffrey",
    "last": "Mosier"
  }
]

Saya telah membuat struktur kelas ini:

public class Person
{
    public string first { get; set; }
    public string last { get; set; }
}
public class Persons
{
    public List<Person> person { get; set; }
}

Saya menggunakan RestSharp dalam metode untuk deserialize secara dinamis ke Orang tipe T...

IRestResponse<T> response = client.Execute<T>(request);
return response;

Masalahnya adalah ketika T adalah Orang saya mendapatkan kesalahan ini pada baris client.Execute:

Tidak dapat mentransmisikan objek dengan tipe 'RestSharp.JsonArray' ke tipe 'System.Collections.Generic.IDictionary`2[System.String,System.Object]'.

Saya juga mencoba dengan Json.Net dan mendapatkan kesalahan ini:

Tidak dapat melakukan deserialize array JSON saat ini (mis. [1,2,3]) ke dalam tipe 'Orang' karena tipe tersebut memerlukan objek JSON (mis. {\"name\":\"value\"}) untuk melakukan deserialize dengan benar.

Mengingat karakter "[" awal, saya mencoba deserializing menjadi Daftar Orang. Itu menghentikan pesan kesalahan dan saya memiliki jumlah catatan "Orang" yang tepat TETAPI semuanya nol. (Saya mengkonfirmasi casing nama identik.) Saya juga tidak benar-benar ingin menggunakan koleksi Daftar ketika selalu hanya ada satu elemen ke array dari server target dan mengikat "Orang" lebih masuk akal daripada "Daftar" .

Apa cara yang benar untuk membatalkan serialisasi JSON ini menjadi Orang dan masih dalam cakupan metodologi IRestResponse<T> response = client.Execute<T>(request) dinamis saya?

3
stackonfire 22 November 2017, 11:06

1 menjawab

Jawaban Terbaik

Seperti yang disebutkan dalam komentar, json Anda memiliki array orang. Oleh karena itu struktur target untuk deserialize harus sesuai dengan itu. Baik menggunakan:

var response = client.Execute<List<Person>>(request);

Atau jika Anda lebih suka kelas Persons, ubah ke

public class Persons : List<Person>
{
}
3
Szeki 22 November 2017, 08:40