【问题标题】:How to deserialize oData V2 with JSON in C#?如何在 C# 中使用 JSON 反序列化 oData V2?
【发布时间】:2021-12-15 06:20:21
【问题描述】:

我正在尝试使用 C# 反序列化 oData V2,但值始终为空:

    {
    "d": {
        "results": [
        {
            "__metadata": {
            "id": "http://vhcalnplci:8000/sap/opu/odata/SAP/ZEMPLOYEE_SRV/EmployeeEntitySet('111111')",
            "uri": "http://vhcalnplci:8000/sap/opu/odata/SAP/ZEMPLOYEE_SRV/EmployeeEntitySet('111111')",
            "type": "ZEMPLOYEE_SRV.EmployeeEntity"
            },
            "Empno": "111111",
            "Fname": "Test Firstname",
            "Lname": "Test Lastname",
            "Addrs": "Test Address",
            "Desgn": "Test Job"
            }
        ]
    }
}

我在 Visual Studio 中尝试过 CLR 类生成,并创建了以下类

public class Rootobject
    {
        public D d { get; set; }
    }

    public class D
    {
        public Result[] results { get; set; }
    }

    public class Result
    {
        public __Metadata __metadata { get; set; }
        public string Empno { get; set; }
        public string Fname { get; set; }
        public string Lname { get; set; }
        public string Addrs { get; set; }
        public string Desgn { get; set; }
    }

    public class __Metadata
    {
        public string id { get; set; }
        public string uri { get; set; }
        public string type { get; set; }
    }

    internal class OData<Result>
    {
        public List<Result> 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<OData<Employee>>(json);
     var employee = result.Value;
 }

你能告诉我我做错了什么吗?谢谢!

【问题讨论】:

  • 不应该OData&lt;Employee&gt;OData&lt;Result&gt;
  • @ErmiyaEskandary 不是真的 - OData&lt;T&gt; 类甚至与 JSON 无关(任何地方都没有 Value 属性)。唯一合乎逻辑的方法是使用 DeserializeObject&lt;Root&gt; - 但 OP 声称结果是相同的,这让我觉得这里没有显示其他内容
  • @CamiloTerevinto 是的,这就是我想要去的地方 - 它甚至不相关,但我不确定代码是否已编译

标签: c# json odata


【解决方案1】:

改变这一行

 var result = JsonConvert.DeserializeObject<OData<Employee>>(json);

进入

 var result = JsonConvert.DeserializeObject<Rootobject>(json); 

【讨论】:

  • 谢谢你的回答,我也试过Rootobject和Result,但也有result "null"
  • 谢谢 var result = JsonConvert.DeserializeObject(json);工作!
  • @InzinjerIzBosne 哎呀,这是我的错,它不是 Root,根据你的课程,它应该是 Rootobject。无论如何都很乐意帮助你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多