Graeme Graeme - 2 months ago 92
C# Question

How to deserialize oData JSON?

I am trying to use the Northwind OData service:

http://services.odata.org/V3/OData/OData.svc/Products?$format=json

and deserialize it to a collection of products:

using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(new Uri(url));
ObservableCollection<Product> products = await response.Content.ReadAsAsync<ObservableCollection<Product>>();
}


But the serializer doesn't seem to like the
odata.metadata
part and the fact that there are 2
odata.type
records there (not sure what they are).

Is there an easy way to do this?

L.B L.B
Answer

Using Json.Net

using (var client = new HttpClient())
{
    var json = await client.GetStringAsync("http://services.odata.org/V3/OData/OData.svc/Products?$format=json");
    var odata = JsonConvert.DeserializeObject<OData>(json);
}

public class Value
{
    [JsonProperty("odata.type")]
    public string Type { set; get; }
    public int ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public DateTime ReleaseDate { get; set; }
    public DateTime? DiscontinuedDate { get; set; }
    public int Rating { get; set; }
    public double Price { get; set; }
}

public class OData
{
    [JsonProperty("odata.metadata")]
    public string Metadata { get; set; }
    public List<Value> Value { get; set; }
}
Comments