C# 有没有更简单的方法可以使用newtonsoft获取以下json中的键名值

C# 有没有更简单的方法可以使用newtonsoft获取以下json中的键名值,c#,json,json.net,C#,Json,Json.net,假设我们有JSON,如下所示: { "Group1": ["Value1", "Value5"], "Group2": ["Value4", "Value11", "Value12", "Value9"], "Group3": ["Value2"] } 给定列表中的值,比如“Value1”,我需要得到相应的键名“Group1” 有没有更简单的方法 我尝试的是: var json = "{\r\n \"Group1\": [\"Value1\", \"Value5\"],\r\n

假设我们有JSON,如下所示:

{
  "Group1": ["Value1", "Value5"],
  "Group2": ["Value4", "Value11", "Value12", "Value9"],
  "Group3": ["Value2"]
}
给定列表中的值,比如“Value1”,我需要得到相应的键名“Group1”

有没有更简单的方法

我尝试的是:

var json = "{\r\n  \"Group1\": [\"Value1\", \"Value5\"],\r\n  \"Group2\": [\"Value4\", \"Value11\", \"Value12\", \"Value9\"],\r\n  \"Group3\": [\"Value2\"]\r\n}";

var jObject = JObject.Parse(json);

var group1 = jObject["Group1"].ToObject<List<string>>();
var group2 = jObject["Group2"].ToObject<List<string>>();
var group3 = jObject["Group3"].ToObject<List<string>>();

var value = group1.Contains("Value1") ? "Group1" : "Invalid";
var json=“{\r\n\'Group1\':[\'Value1\',\'Value5\'],\r\n\'Group2\':[\'Value4\',\'Value11\',\'Value12\',\'Value9\',\r\n\'Group3\':[\'Value2\']\r\n}”;
var jObject=jObject.Parse(json);
var group1=jObject[“group1”].ToObject();
var group2=jObject[“group2”].ToObject();
var group3=jObject[“group3”].ToObject();
var值=组1。是否包含(“值1”)?“组1”:“无效”;
这就是您需要的:

反序列化到
字典

过滤并获取密钥

var data = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(json);

string key = data.Where(kvp => kvp.Value.Contains(searchValue))
                 .Select(kvp => kvp.Key)
                 .FirstOrDefault();
var data=JsonConvert.DeserializeObject(json);
string key=data.Where(kvp=>kvp.Value.Contains(searchValue))
.Select(kvp=>kvp.Key)
.FirstOrDefault();
这就是您需要的:

反序列化到
字典

过滤并获取密钥

var data = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(json);

string key = data.Where(kvp => kvp.Value.Contains(searchValue))
                 .Select(kvp => kvp.Key)
                 .FirstOrDefault();
var data=JsonConvert.DeserializeObject(json);
string key=data.Where(kvp=>kvp.Value.Contains(searchValue))
.Select(kvp=>kvp.Key)
.FirstOrDefault();

与Daniel Tran的回答类似,如果您想继续使用
JObject
,您可以这样做:

var jObject = JObject.Parse(json);

var key = jObject.Properties()
                 .Where(p => p.Value.Children().Contains("Value1"))
                 .Select(p => p.Name)
                 .FirstOrDefault();

Fiddle:

类似于Daniel Tran的精细回答,如果您想继续使用
JObject
,您可以这样做:

var jObject = JObject.Parse(json);

var key = jObject.Properties()
                 .Where(p => p.Value.Children().Contains("Value1"))
                 .Select(p => p.Name)
                 .FirstOrDefault();

Fiddle:

你尝试过的最不容易的方法是什么?最简单的方法是,在stackoverflow上发布,有人解决它,复制它,粘贴它,编译它,发送它。@DanielTran:我当然试过了。最初,我通过解析json将每个JToken转换为List进行转换。这样我就有了多个列表(在本例中为3)。想知道是否有比什么更干净、更好的方法更容易做到这一点??那里没有代码对JSON做任何事情。我想答案是“不”-没有什么比让别人为你编写代码更容易的了。告诉我们你做了什么。你做过什么不容易的事情?最简单的方法是,在stackoverflow上发布,有人解决它,复制它,粘贴它,编译它,发布它。@DanielTran:当然我试过了。最初,我通过解析json将每个JToken转换为List进行转换。这样我就有了多个列表(在本例中为3)。想知道是否有比什么更干净、更好的方法更容易做到这一点??那里没有代码对JSON做任何事情。我想答案是“不”-没有什么比让别人为您编写代码更容易的了。告诉我们您尝试了什么。