【问题标题】:deserializing a nested array JSON in C# returning null values在 C# 中反序列化嵌套数组 JSON 返回空值
【发布时间】:2014-05-22 23:26:53
【问题描述】:

当我使用 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);  

提前感谢您的帮助!

【问题讨论】:

    标签: c# json json.net deserialization


    【解决方案1】:

    这是任何 JSON 解析器的预期行为。你给它的字符串应该代表你想从中得到的对象,所以当你说:

    JsonConvert.DeserializeObject<ServicePlan>(graphResult)
    

    ...您正在指示它将 graph 结果 反序列化为 ServicePlan 对象。它会创建一个ServicePlan,查看您给它的对象(“图形结果”),找不到名为servicePlanId 的属性等,因此它不会为这些属性设置任何值。

    如果您尝试创建ServicePlan,则需要向其传递一个更像{"servicePlanId":"4ccb","servicePlanName":"YAMMER_ENTERPRISE"} 的字符串值。

    另一方面,如果您试图从反序列化图形结果中获取 ServicePlan,您可以说:

    JsonConvert.DeserializeObject<Graphdata>(text).value[0].servicePlans
    

    【讨论】:

    • 谢谢,我试图从反序列化的图表结果中获取 ServicePlans。我能够使用您的提示并使用以下语句得到它: var graphAPIDataDeserialized = JsonConvert.DeserializeObject(graphResult).value[0].servicePlans;
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多