C#中如何显示JSON反序列化后的字典或字典元素?
解决方案
你当前输出Createfile.QAcast是因为Console.WriteLine默认调用对象的ToString()方法,而自定义的QAcast类没有重写这个方法,所以输出的是类的完全限定名称。要输出JSON格式内容或者字典元素,有两种简单方法:
方法1:将对象重新序列化为JSON字符串输出
直接把反序列化后的QAcast对象再转成JSON格式的字符串,就能得到你想要的输出:
修改Main方法中的输出代码:
static void Main(string[] args) { string filename = "./Database.json"; string fileread = File.ReadAllText(filename); QAcast QAlist = JsonSerializer.Deserialize<QAcast>(fileread); // 序列化为带缩进的JSON字符串,方便阅读 string jsonOutput = JsonSerializer.Serialize(QAlist, new JsonSerializerOptions { WriteIndented = true }); Console.WriteLine(jsonOutput); }
运行后会输出格式化后的JSON:
{ "QAlist": { "1+1": "2", "2+2": "4" } }
如果想要紧凑的一行格式,去掉JsonSerializerOptions参数即可:
string jsonOutput = JsonSerializer.Serialize(QAlist);
方法2:遍历字典显示键值对
如果只是想单独展示每个问题和答案,直接遍历QAlist字典即可(注意加空检查避免报错):
static void Main(string[] args) { string filename = "./Database.json"; string fileread = File.ReadAllText(filename); QAcast QAlist = JsonSerializer.Deserialize<QAcast>(fileread); if (QAlist.QAlist != null) { foreach (var item in QAlist.QAlist) { Console.WriteLine($"问题:{item.Key},答案:{item.Value}"); } } }
运行后输出:
问题:1+1,答案:2 问题:2+2,答案:4
内容的提问来源于stack exchange,提问作者austihh
相关产品推荐
相关产品推荐

