反序列化字符串化JSON对象

本文关键字:对象 JSON 字符串 反序列化 | 更新日期: 2023-09-27 18:17:55

我读过一些关于如何做到这一点的帖子,但是我所看到的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"中的两个对象?

理想情况下,我想把这个字符串化的JSON转换成一个通用列表

List<string,bool>

但是我需要了解如何处理上面的场景。

反序列化字符串化JSON对象

如果你使用LINQ到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);
        }
    }
}

值的强制转换调用从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,但两种方法都有效,哪一种更好取决于您的上下文。