【问题标题】:Read value from nested Json object从嵌套的 Json 对象中读取值
【发布时间】:2020-11-09 02:08:54
【问题描述】:

我正在尝试从嵌套的 Json 对象中读取一个值,但我收到了 Parse 错误:

我的 Json 对象:

{
    "MessageId": "f6774927-37cf-4608-b985-14a7d86a38f9",
    "Time": "2017-04-06T16:28:38.0719933+02:00",
    
    "Data":
    {
        "ID":
        {
            "value": "0008044834"
        },
        "Carrier":
        {
            "value": 0
        },
        "Tool":
        {
            "value": 0
        }
    }
}
          var myJsonString = File.ReadAllText(_currentDictory.FullName + @"\test\" + completeFilename);


            var myJObject = JObject.Parse(myJsonString);


            var serial = myJObject.SelectToken("Data.ID").Value<String>();

System.InvalidCastException
  HResult=0x80004002
  Message=Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken.
  Source=Newtonsoft.Json

读取“MessageID”等其他值没有任何问题,但一旦我尝试获取“Data.XYZ”,我就会收到上述错误。

【问题讨论】:

    标签: c# json parsing


    【解决方案1】:

    您需要将value 添加到您的json 路径中:

    var serial = myJObject.SelectToken("Data.ID.value").Value<String>();
    

    您当前的路径选择了JObject,其中包含一个名为value 的属性,您无法将其直接转换为字符串。

    【讨论】:

      【解决方案2】:

      MessageId 是一个字符串。所以你可以直接读取它的值。 另一方面,数据包含对象(参见 { 和 } )。因此你需要使用

      var serial = myJObject.SelectToken("Data.ID.value").Value<String>();
      

      另见: Getting 'Cannot cast Newtonsoft.Json.Linq.JObject to Newtonsoft.Json.Linq.JToken' when retrieving items from JSON

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-18
        • 2018-10-12
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多