首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何反序列化oData JSON?

如何反序列化oData JSON?
EN

Stack Overflow用户
提问于 2014-11-08 18:00:06
回答 5查看 38.3K关注 0票数 28

我正在尝试使用Northwind OData服务:

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

并将其反序列化为一组产品:

代码语言:javascript
运行
复制
    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记录(不确定它们是什么)。

有什么简单的方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-11-08 18:06:33

使用Json.Net

代码语言:javascript
运行
复制
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);
}
代码语言:javascript
运行
复制
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; }
}
票数 43
EN

Stack Overflow用户

发布于 2016-10-12 14:47:41

为来自odata的响应定义一个类(它是一个泛型定义,因此您可以将其用于任何类型):

代码语言:javascript
运行
复制
internal class ODataResponse<T>
 {
    public List<T> Value { get; set; }
 }

这样的反序列化:

代码语言:javascript
运行
复制
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;
 }
票数 32
EN

Stack Overflow用户

发布于 2016-09-21 11:51:17

如果您正在使用Visual,则有一个内置的出色的CLR类生成功能。

  1. 将OData有效负载复制到剪贴板中
  2. 在Visual中选择菜单选项编辑->粘贴特殊->粘贴JSON作为对象类

然后,您可以使用Json.NET将这些类反序列化(如L.B的答案中所述)。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26820275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档