从Json Http响应反序列化对象列表

本文关键字:对象 列表 反序列化 响应 Json Http | 更新日期: 2023-09-27 18:09:38

JSON响应如下:

{
  "Adddress": [
    {
      "Country": "United States",
      "City": "Irmo",
      "Line1": "103 Kinley Rd",
      "Line2": null,
      "PostalCode": "20063",
      "State": "SC",
      "AddressCode": "BILL-01"
    },
    {
      "Country": "United States",
      "City": "Irmo",
      "Line1": "1098 Kanley Road",
      "Line2": "Building B",
      "PostalCode": "29063",
      "State": "SC",
      "AddressCode": "SHIP-01"
    }]
}

َAnd这是我的地址类:

 [JsonObject()]
    public class Address
    {
        public string AddressCode { get; set; }
        public string Line1 { get; set; }
        public string Line2 { get; set; }
        public string Country { get; set; }
        public string State { get; set; }
        public string PostalCode { get; set; }
        public string City { get; set; }
    }

我有这个c#代码来反序列化这个http响应到我的对象列表:

HttpResponseMessage response = client.GetAsync(urlParameters).Result;  // Blocking call!
if (response.IsSuccessStatusCode)
{
    var dataObjects = response.Content.ReadAsAsync<Adddress>().Result;//JsonConvert.DeserializeObject<List<RestResponse>>(response.Content.ReadAsStringAsync().Result);//
    foreach (var d in dataObjects)
    {
        Console.WriteLine("{0}", d.Country);
    }
}

但是我得到这个错误:

附加信息:无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.IEnumerable ' 1[testest . js]。因为该类型需要一个JSON数组(例如[1,2,3])来正确反序列化。

要修复此错误,请将JSON更改为JSON数组(例如:[1,2,3])或更改反序列化类型,使其成为普通的。net类型(例如,不是整数这样的基本类型,也不是集合类型)如数组或列表),可以从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中以强制它从JSON对象反序列化。

路径'RestResponse',第2行,位置19。

我该怎么做才能使我的反序列化工作呢?

从Json Http响应反序列化对象列表

Adddress是单一的,你得到的json是一个地址数组(所以不止一个),你必须将其反序列化为例如AddressList包含多个地址

string json = "{'"Adddress'":[{'"Country'":'"United States'",'"City'":'"Irmo'",'"Line1'":'"103 Kinley Rd'",'"Line2'":null,'"PostalCode'":'"20063'",'"State'":'"SC'",'"AddressCode'":'"BILL - 01'"},{'"Country'":'"United States'",'"City'":'"Irmo'",'"Line1'":'"1098 Kanley Road'",'"Line2'":'"Building B'",'"PostalCode'":'"29063'",'"State'":'"SC'",'"AddressCode'":'"SHIP - 01'"}]}";
 var dataObjects = JsonConvert.DeserializeObject<AddressList>(json);
 foreach (var d in dataObjects.Adddress)
 {
     Console.WriteLine("{0}", d.Country);
 }

类:

public class Adddress
{
    [JsonProperty("Country")]
    public string Country { get; set; }
    [JsonProperty("City")]
    public string City { get; set; }
    [JsonProperty("Line1")]
    public string Line1 { get; set; }
    [JsonProperty("Line2")]
    public string Line2 { get; set; }
    [JsonProperty("PostalCode")]
    public string PostalCode { get; set; }
    [JsonProperty("State")]
    public string State { get; set; }
    [JsonProperty("AddressCode")]
    public string AddressCode { get; set; }
}
public class AddressList
{
    [JsonProperty("Adddress")]
    public IList<Adddress> Adddress { get; set; }
}