我已经阅读了一些关于如何执行此操作的帖子,但是我所看到的 JSON 对象的所有内容都有要查询的特定属性名称,而我没有。
这是我的 JSON 字符串:
{
"424406": true,
"425171": true,
"411961": true
}
我想遍历数组并分别读取字符串和 bool 字段(JSON 字符串存储在隐藏变量中,然后在我后面的 asp.net 代码中访问):
dynamic dynObj = JsonConvert.DeserializeObject(partDetailsSelectedItems.Value);
foreach (dynamic x in dynObj)
{
string Id = ????
bool boolValue = ???
}
如何在不指定名称的情况下获取“x”中的 2 个对象中的每一个?
理想情况下,我想将这个字符串化的 JSON 转换为通用列表
List<string,bool>
但我需要了解如何处理上述情况。
最佳答案
如果您使用 LINQ to JSON 就很简单,因为 JObject
允许您遍历所有键/值对 - 它实现了 IEnumerable<KeyValuePair<string, JToken>>
:
using System;
using System.IO;
using Newtonsoft.Json.Linq;
class Test
{
public static void Main(string[] args)
{
string text = File.ReadAllText("test.json");
var json = JObject.Parse(text);
foreach (var pair in json)
{
string id = pair.Key;
bool value = (bool) pair.Value;
Console.WriteLine("id: {0}; value: {1}", id, value);
}
}
}
值的转换正在调用 explicit conversion来自 JToken
至 bool
.不需要 dynamic
在这里。
或者,如评论中所述,您可以反序列化为 Dictionary<string, bool>
:
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
class Test
{
public static void Main(string[] args)
{
string text = File.ReadAllText("test.json");
var dictionary = JsonConvert.DeserializeObject<Dictionary<string, bool>>(text);
foreach (var pair in dictionary)
{
string id = pair.Key;
bool value = pair.Value;
Console.WriteLine("id: {0}; value: {1}", id, value);
}
}
}
我通常最终自己使用 LINQ to JSON,但是这两种方法都有效,哪种更好取决于您的上下文。
关于c# - 反序列化字符串化的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308097/