Deserialize a list of objects from Json Http response
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; }
}
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, 2022Comments
-
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 over 7 yearsThe Json that I get does not have "\" this. I have the exact same string but without backslashes and it doesn't work.
-
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