动态 Json - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值
Posted
技术标签:
【中文标题】动态 Json - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值【英文标题】:Dynamic Json - Cannot access child value on Newtonsoft.Json.Linq.JValue 【发布时间】:2018-12-19 02:48:05 【问题描述】:我正在尝试访问我的 json 中的子值,如下所示
"event": "InstanceCreated",
"destination": "application",
"data": "\"pipelineId\":1,\"requestId\":1,\"pid\":24740"
这是我从外部进程获得的字符串。 我正在尝试访问 requestId 值
dynamic json = JsonConvert.DeserializeObject(s1);
var id = json.data.requestId;
但我得到的是标题中提到的例外。我已经阅读了所有类似的问题,但我找不到任何可以解决我的问题。我考虑过你可能有太多转义字符的问题,如 \ 但这不是我的情况,并且执行 Regex.Unescape 不会这样做,因为它会使字符串无法解析。 我也尝试过使用 JObject.Parse(s1) 或任何其他与类相关的解析方法,但我总是得到那个异常。
我可以访问该 json 的一些值,例如
json.@event
json.destination
json.data
正确返回我的关联值。
我正在使用 Newtonsoft.Json 和 Unity3D
感谢您的帮助
【问题讨论】:
【参考方案1】:您的数据字段不是像您期望的那样具有 3 个属性的对象,而只是现在格式化的字符串。您要么需要从源获取正确的格式,要么单独反序列化字符串以访问属性。
获得预期结果应该是什么样子:
"event": "InstanceCreated",
"destination": "application",
"data":
"pipelineId": 1,
"requestId": 1,
"pid": 24740
【讨论】:
你的意思是我需要用数据令牌内的新行格式化它?我认为只要是正确的json,反序列化或解析就不会考虑格式 格式确实无关紧要,但请仔细查看数据包含的内容。它不再是一个字符串(参见 ...
和" ... "
之间的区别)。您的数据属性包含一个字符串,而不是具有3 个属性的结构。现在它是 json 中的 json。
啊!没注意,非常感谢,那我去格式化一下以上是关于动态 Json - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值的主要内容,如果未能解决你的问题,请参考以下文章
无法访问 Newtonsoft.JSON .Net Core 2.* 方法
“无法访问 Newtonsoft.Json.Linq.JValue 上的子值”
访问 JToken 的值时出现异常 - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值
System.InvalidOperationException:无法访问 Newtonsoft.Json.Linq.JValue 上的子值