Deserialize a list of objects from Json Http response

14,079

Adddress is single, the json you get in is an array of addresses (so more then one), you have to deserialize it into e.g. AddressList that contains more then one address

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

Classes:

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; }
}
Share:
14,079
Pouyan
Author by

Pouyan

I'm a Software Engineer and Microsoft Technology Specialist with more than 8 years of experience in developing Web and Windows Applications using C#, ASP.Net, WPF, SharePoint, etc.

Updated on June 04, 2022

Comments

  • Pouyan
    Pouyan almost 2 years

    I have my JSON Response like that:

    {
      "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 Here is my Address Class:

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

    And I have this C# Code to deserialize this http response to my object list:

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

    But I'm getting this error:

    Additional information: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.IEnumerable`1[TestREST.Program+RestResponse]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

    To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

    Path 'RestResponse', line 2, position 19.

    What should I do with it to make my deserilization work ?

  • Pouyan
    Pouyan over 7 years
    The Json that I get does not have "\" this. I have the exact same string but without backslashes and it doesn't work.
  • Jim
    Jim over 7 years
    @Pouyan the ` \ ` is to escape the ` " ` characters. Because i just wrote the string inside c# code itself (my example doesn't get the json data from a server) ... works perfectly btw