Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过JSON标记读取JSON_C#_Json_Json.net - Fatal编程技术网

C# 通过JSON标记读取JSON

C# 通过JSON标记读取JSON,c#,json,json.net,C#,Json,Json.net,我从一家身份检查公司获得了JSON格式的数据。我只需要从JSON文件中获取一些数据,所以我反序列化了JSON文件并尝试读取一个特定的标记。当我试图读取标记时,总是得到空值。下面是我的JSON文件和C#代码: 下面是我的代码: var data = (JObject)JsonConvert.DeserializeObject(JSONResponse); string x = data["clientResponsePayload.orchestrationDecisions.sequence

我从一家身份检查公司获得了JSON格式的数据。我只需要从JSON文件中获取一些数据,所以我反序列化了JSON文件并尝试读取一个特定的标记。当我试图读取标记时,总是得到空值。下面是我的JSON文件和C#代码:

下面是我的代码:

 var data = (JObject)JsonConvert.DeserializeObject(JSONResponse);
 string x = data["clientResponsePayload.orchestrationDecisions.sequenceId"].Value<string>();
我不确定我做错了什么。这个JSON文件很大,有很多嵌套的JSON标记。以下是我如何读取身份检查公司发送给我的JSON文件:

HttpResponseMessage response = client.SendAsync(request).Result;
string responseContent = await response.Content.ReadAsStringAsync();

如果您创建一组这样的类来获取值,可能会更容易、更可读

public class ReponseObject
{
    public Payload ClientResponsePayload { get; set; }
}

public class Payload
{
    public List<Decisions> OrchestrationDecisions { get; set; }
}

public class Decisions
{
    public string SequenceId { get; set; }
}
公共类响应对象
{
公共负载ClientResponsePayload{get;set;}
}
公共类有效载荷
{
公共列表编排决策{get;set;}
}
公共阶级决策
{
公共字符串SequenceId{get;set;}
}
然后像这样做:

ReponseObject jsonObject = JsonConvert.DeserializeObject<ReponseObject>(json);
string sequenceId = jsonObject.ClientResponsePayload.OrchestrationDecisions.First().SequenceId;
data["clientResponsePayload"]["orchestrationDecisions"][0]["sequenceId"].Value<string>()
ReponseObject jsonObject=JsonConvert.DeserializeObject(json);
string sequenceId=jsonObject.ClientResponsePayload.OrchestrationDecisions.First().sequenceId;
无论如何,如果您不想创建类,可以这样做:

ReponseObject jsonObject = JsonConvert.DeserializeObject<ReponseObject>(json);
string sequenceId = jsonObject.ClientResponsePayload.OrchestrationDecisions.First().SequenceId;
data["clientResponsePayload"]["orchestrationDecisions"][0]["sequenceId"].Value<string>()
data[“clientResponsePayload”][“orchestrationDecisions”][0][“sequenceId”]。Value()

您有几个问题

首先,
“clientResponsePayload.orchestrationDecisions.sequenceId”
是一个。要通过JSONPath查询查询
JObject
,您需要使用。您正在使用的只获取或设置带有指定属性名的
JToken
,而不执行JSON层次结构的深层查询

其次,
sequenceId
属性实际上嵌套在数组中,因此需要使用路径
“clientResponsePayload.orchestrationDecisions[0].sequenceId”
来获取第一个。或者,您也可以使用带有
*
通配符
“clientResponsePayload.orchestrationDecisions[*].sequenceId”
的路径来获取所有序列ID

因此,您的代码应该是:

var x=data.SelectToken(“clientResponsePayload.orchestrationDecisions[0].sequenceId”)?.Value();
或者,不使用JSONPath查询,您可以使用如下方法将索引器链接在一起:

var x=data[“clientResponsePayload”]?[“orchestrationDecisions”]?[0]?[“sequenceId”]?.Value();

Demo fiddle.

orchestrationDecisions
是一个数组,而不是一个对象,也许这就是原因。根据您的建议,我尝试将代码更改为:data[“clientResponsePayload.orchestrationDecisions[0]”].Value()。仍然收到“System.ArgumentNullException”错误我的JSON不小。非常大的文件。我刚刚发布了一小部分JSON。我可以创建一个对象,但是我尝试的值嵌套在很多JSON标记中。谢谢。我一修改代码,它马上就起作用了。