【发布时间】: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 是的,这就是我想要去的地方 - 它甚至不相关,但我不确定代码是否已编译