c# - 反序列化字符串化的 JSON 对象

标签 c# .net json

我已经阅读了一些关于如何执行此操作的帖子,但是我所看到的 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来自 JTokenbool .不需要 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/

相关文章:

c# - 客户端支持 C# 7.0 所需的最低版本的 .NET

.net - WCF @ServiceHost 调试 ="true"但 web.config 编译 ="false"

javascript - 如何从包含四个属性的 JSON 对象创建包含两个属性的 JSON 对象

json - Hash::Ordered 与 Tie::IxHash 与 JSON::XS 编码

c# - Net core通用存储库模式如何在编译时不知道其类型的情况下注入(inject)DbContext?

C# - 数学公式帮助 - 作业

c# - 为什么Lazy <T>不懒惰?

c# - 通过windows服务打开浏览器渲染和截图selenium .Net中的webgl页面

c# - PrinterPlusPlus 找不到虚拟打印机

javascript - JSON解析错误: Unexpected identifier