C# 如何从c代码下方的结果(事件响应)中获取系统id

C# 如何从c代码下方的结果(事件响应)中获取系统id,c#,json,servicenow,C#,Json,Servicenow,我从HttpWebRequest响应流中读取了以下JSON(已修改),我想提取“sys\u id”的值: 这就是我迄今为止所尝试的,其中incident\u response是一个包含上述JSON的字符串: var jObject = JObject.Parse(incident_responce); var value = (string)jObject["sys_id"]; Console.WriteLine(value); 但是,它没有起作用,我想是因为在开始时有“result”。如

我从
HttpWebRequest
响应流中读取了以下JSON(已修改),我想提取
“sys\u id”
的值:

这就是我迄今为止所尝试的,其中
incident\u response
是一个包含上述JSON的字符串:

var jObject = JObject.Parse(incident_responce); 
var value = (string)jObject["sys_id"]; 
Console.WriteLine(value);

但是,它没有起作用,我想是因为在开始时有
“result”
。如何检索此值?

正如您所怀疑的,您的初始尝试失败,因为
的“sys\u id”
嵌套在
的“result”对象中:

{ "result": { ... "sys_id":"7fb4e50edb8c0b007ea0f4e9bf9619ba" } }
如果您缩进并格式化JSON(例如,通过将其上载到),则更容易看到这一点

可以使用以下命令直接查询此类嵌套值:

SelectToken()
支持使用查询深入JSON容器层次结构中的值。如果未找到
“result.sys\u id”
标记,则返回
null

或者,您可以使用Json.NET对查询Json层次结构的支持,使用:

但是,如果未找到
“result”
标记,将抛出
RuntimeBinderException
,而不是返回
null


正在工作。

使用了此选项,但它不起作用,因为我认为启动{string incident_response=streamReader.ReadToEnd();var jObject=jObject.Parse(incident_response);var value=(string)jObject[“sys_id”];Console.WriteLine(value);}请给出建议。反斜杠的出现表明这不是JSON。您必须在代码中使用这些反斜杠,但是输出应该类似于没有反斜杠的
{“result”:{…}}
。您是否从API获取此文本?
{ "result": { ... "sys_id":"7fb4e50edb8c0b007ea0f4e9bf9619ba" } }
var root = JToken.Parse(incident_responce); 
var value = (string)root.SelectToken("result.sys_id");          
dynamic root = JToken.Parse(incident_responce); 
var value = (string)root.result.sys_id;