动态Json-无法访问Newtonsoft.Json.Linq.JValue上的子值

时间:2018-07-11 06:57:26

标签: c# json unity3d json.net

我正在尝试访问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 个答案:

答案 0 :(得分:1)

您的数据字段不是具有您所期望的3个属性的对象,而是一个现在格式化的字符串。您需要从源中获取正确的格式,或者分别对字符串进行反序列化以访问属性。

如何获得预期结果:

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