我正在尝试使用Northwind OData服务:
http://services.odata.org/V3/OData/OData.svc/Products?$format=json
并将其反序列化为一组产品:
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(new Uri(url));
ObservableCollection<Product> products = await response.Content.ReadAsAsync<ObservableCollection<Product>>();
}
但是序列化程序似乎不喜欢odata.metadata
部分,也不喜欢那里有两个odata.type
记录(不确定它们是什么)。
有什么简单的方法吗?
发布于 2014-11-08 10:06:33
使用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; }
}
发布于 2016-10-12 06:47:41
为来自odata的响应定义一个类(它是一个泛型定义,因此您可以将其用于任何类型):
internal class ODataResponse<T>
{
public List<T> Value { get; set; }
}
这样的反序列化:
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(new Uri(url));
var json = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<ODataResponse<Product>>(json);
var products = result.Value;
}
发布于 2016-09-21 03:51:17
如果您正在使用Visual,则有一个内置的出色的CLR类生成功能。
然后,您可以使用Json.NET将这些类反序列化(如L.B的答案中所述)。
https://stackoverflow.com/questions/26820275
复制