假设我们有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";
答案 0 :(得分:3)
这就是你需要的:
反序列化为Dictionary<string, List<string>>
过滤并获取密钥。
var data = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(json);
string key = data.Where(kvp => kvp.Value.Contains(searchValue))
.Select(kvp => kvp.Key)
.FirstOrDefault();
答案 1 :(得分:1)
与Daniel Tran的答案相似,如果你想继续使用JObject
,你可以这样做:
var jObject = JObject.Parse(json);
var key = jObject.Properties()
.Where(p => p.Value.Children().Contains("Value1"))
.Select(p => p.Name)
.FirstOrDefault();