【问题标题】:Dynamic Json - Cannot access child value on Newtonsoft.Json.Linq.JValue动态 Json - 无法访问 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

感谢您的帮助

【问题讨论】:

    标签: c# json unity3d json.net


    【解决方案1】:

    您的数据字段不是像您期望的那样具有 3 个属性的对象,而只是现在格式化的字符串。您要么需要从源获取正确的格式,要么单独反序列化字符串以访问属性。

    获得预期结果应该是什么样子:

    {
        "event": "InstanceCreated",
        "destination": "application",
        "data": {
            "pipelineId": 1,
            "requestId": 1,
            "pid": 24740
        }
    }
    

    【讨论】:

    • 你的意思是我需要用数据令牌内的新行格式化它?我认为只要是正确的json,反序列化或解析就不会考虑格式
    • 格式确实无关紧要,但请仔细查看数据包含的内容。它不再是一个字符串(参见{ ... }"{ ... }" 之间的区别)。您的数据属性包含一个字符串,而不是具有3 个属性的结构。现在它是 json 中的 json。
    • 啊!没注意,非常感谢,那我去格式化一下
    猜你喜欢
    • 2021-01-23
    • 2021-08-09
    • 1970-01-01
    • 2019-08-24
    • 2021-08-21
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多