簡體   English   中英

反序列化來自Json Http響應的對象列表

[英]Deserialize a list of objects from Json Http response

我有這樣的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"
    }]
}

َ這是我的地址類別:

 [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 [TestREST.Program + RestResponse]',因為該類型需要JSON數組(例如[1,2,3])正確反序列化。

要解決此錯誤,可以將JSON更改為JSON數組(例如[1,2,3]),也可以更改反序列化類型,使其成為普通的.NET類型(例如,不像整數這樣的原始類型,也不像這樣的集合類型)數組或列表),可以從JSON對象反序列化。 還可以將JsonObjectAttribute添加到類型中,以強制其從JSON對象反序列化。

路徑“ RestResponse”,第2行,位置19。

為了使反序列化工作有效,我該怎么辦?

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; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM