使用newtonSoft JSON反序列化JSON时,我得到的返回值为空值。
这是我的JSON:
{"odata.metadata":"https://graph.abc.com/testapi",
"value":
[{"capabilityStatus":"Enabled",
"consumedUnits":2,
"objectId":"c9992e5ef110_6fd2c87-1e91e994b900",
"prepaidUnits":{"enabled":25,"suspended":0,"warning":0},
"servicePlans":
[{"servicePlanId":"4ccb","servicePlanName":"YAMMER_ENTERPRISE"},
{"servicePlanId":"bea4","servicePlanName":"RMS_S_ENTERPRISE"},
{"servicePlanId":"43de","servicePlanName":"OFFICESUBSCRIPTION"},
{"servicePlanId":"0fea","servicePlanName":"MCOSTANDARD"},
{"servicePlanId":"e95be","servicePlanName":"SHAREPOINTWAC"},
{"servicePlanId":"5dbe","servicePlanName":"SHAREPOINTENTERPRISE"},
{"servicePlanId":"efb8","servicePlanName":"EXCHANGE_S_ENTERPRISE"}],
"skuId":"42f0-b197",
"skuPartNumber":"ENTERPRISEPACK"}]}
这是我的课程:
public class PrepaidUnits
{
public int enabled { get; set; }
public int suspended { get; set; }
public int warning { get; set; }
}
public class ServicePlan
{
public string servicePlanId { get; set; }
public string servicePlanName { get; set; }
}
public class Value
{
public string capabilityStatus { get; set; }
public int consumedUnits { get; set; }
public string objectId { get; set; }
public PrepaidUnits prepaidUnits { get; set; }
public List<ServicePlan> servicePlans { get; set; }
public string skuId { get; set; }
public string skuPartNumber { get; set; }
}
public class Graphdata
{
public string odata_metadata { get; set; }
public List<Value> value { get; set; }
}
因此,这里的问题是,当我使用以下语句反序列化时,返回的servicePlanId和servicePlanName为空值。我在这里做错了什么?
var graphAPIDataDeserialized = JsonConvert.DeserializeObject<ServicePlan>(graphResult);
但是,当我使用Graphdata类时,我可以在JSON响应中看到所有值:
var graphAPIDataDeserialized = JsonConvert.DeserializeObject<Graphdata>(graphResult);
在此先感谢您的帮助!
最佳答案
这是任何JSON解析器的预期行为。您提供的字符串应该表示您要从中获得的对象,因此当您说:
JsonConvert.DeserializeObject<ServicePlan>(graphResult)
...指示它将图形结果反序列化为
ServicePlan
对象。它创建一个ServicePlan
,查看您赋予它的对象(“图形结果”),没有找到名为servicePlanId
的属性,等等,因此它不会在这些属性上设置任何值。如果要创建
ServicePlan
,则需要向其传递一个类似于{"servicePlanId":"4ccb","servicePlanName":"YAMMER_ENTERPRISE"}
的字符串值。另一方面,如果您试图从反序列化的图形结果中获取ServicePlans,则可以说:
JsonConvert.DeserializeObject<Graphdata>(text).value[0].servicePlans