如何在 C# 中使用 JSON 反序列化 oData V2?
Posted
技术标签:
【中文标题】如何在 C# 中使用 JSON 反序列化 oData V2?【英文标题】:How to deserialize oData V2 with JSON in C#? 【发布时间】: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<Employee>
是OData<Result>
?
@ErmiyaEskandary 不是真的 - OData<T>
类甚至与 JSON 无关(任何地方都没有 Value
属性)。唯一合乎逻辑的方法是使用 DeserializeObject<Root>
- 但 OP 声称结果是相同的,这让我觉得这里没有显示其他内容
@CamiloTerevinto 是的,这就是我想要去的地方 - 它甚至不相关,但我不确定代码是否已编译
【参考方案1】:
改变这一行
var result = JsonConvert.DeserializeObject<OData<Employee>>(json);
进入
var result = JsonConvert.DeserializeObject<Rootobject>(json);
【讨论】:
谢谢你的回答,我也试过Rootobject和Result,但也有result "null" 谢谢 var result = JsonConvert.DeserializeObjectRootobject
。无论如何都很乐意帮助你。以上是关于如何在 C# 中使用 JSON 反序列化 oData V2?的主要内容,如果未能解决你的问题,请参考以下文章