【问题标题】:Unable to retrieve a value from JSON, getting 'Cannot cast Newtonsoft.Json.Linq.JArray to Newtonsoft.Json.Linq.JToken.' exception无法从 JSON 中检索值,出现“无法将 Newtonsoft.Json.Linq.JArray 转换为 Newtonsoft.Json.Linq.JToken。”例外
【发布时间】:2019-01-22 17:25:54
【问题描述】:

我有以下 JSON 示例

     "object_properties":{
        "has_related":[
           {
              "id":"id1",
              "label":"label1"
           },
           {
              "id":"id2",
              "label":"label2"
           },
           {
              "id":"id3",
              "label":"label3"
           }
        ],
        "member_of":[
           {
              "id":"id4",
              "label":"label4"
           }
        ],
        "is_top_concept_in_scheme":[
           {
              "id":"id5",
              "label":"label5"
           }
        ],
        "has_broader":[
           {
              "id":"id6",
              "label":"label6"
           }
        ]
     }

我正在尝试使用以下代码从“member_of”属性中获取 ID 和标签

        var objectPropertiesParent = parent["object_properties"];
        if (objectPropertiesParent != null)
        {
            MemberOfConceptObjectId = string.Empty;
            MemberOfConceptObjectLabel = string.Empty;
            var MemberOfConceptObject = objectPropertiesParent.Value<Array>("member_of");
            if (MemberOfConceptObject != null)
            {
                MemberOfConceptObjectId = token.Value<JArray>("object_properties").Values<JArray>("member_of").FirstOrDefault().Values<string>("id").FirstOrDefault();
                MemberOfConceptObjectLabel = token.Value<JArray>("object_properties").Values<JArray>("member_of").FirstOrDefault().Values<string>("label").FirstOrDefault();
            }
        }

但是,我得到“无法将 Newtonsoft.Json.Linq.JArray 转换为 Newtonsoft.Json.Linq.JToken。”在哪里尝试设置 MemberOfConceptObject 变量(var MemberOfConceptObject = objectPropertiesParent.Value("member_of"); line)

当我使用以下代码行时

MemberOfConceptObjectId = token.Values<JToken>("object_properties").Values<string>("member_of").FirstOrDefault();

我收到以下异常:“无法访问 Newtonsoft.Json.Linq.JProperty 上的子值。”

请告诉我应该如何正确、干净地检索 member_of 属性的 ID 和标签

非常感谢您的帮助

【问题讨论】:

  • 那是因为它不是数组。
  • 你为什么不直接解析到一个类,而不是做那些手动的、效率极低的代码?
  • 我正在接管别人的代码。最初的JSON文件被修改了,我正在尝试相应地调整代码

标签: c# json linq


【解决方案1】:

这对我有用

        var MemberOfConceptObject = parent["object_properties"]["member_of"];
        if (MemberOfConceptObject != null)
        {
            MemberOfConceptObjectId = MemberOfConceptObject[0]["id"].ToString();
            MemberOfConceptObjectLabel = MemberOfConceptObject[0]["label"].ToString();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2019-05-07
    相关资源
    最近更新 更多