C#使用Newtonsoft.Json序列化Dictionary<string, int>输出JSON带反斜杠如何解决
问题根因
- 你对数据执行了两次JSON序列化操作:
- 首次调用
JsonConvert.SerializeObject(aux)已经将字典对象转为带双引号的JSON字符串 - 后续调用
serializer.Serialize(sw, json)时,序列化器会将输入的字符串视为普通文本,对内部的双引号自动加反斜杠转义,最终就出现了多余的转义符。
- 首次调用
修复方案
两种方案二选一即可:
方案1:直接写入已序列化的JSON字符串
无需再调用JsonSerializer二次序列化,直接将生成的JSON字符串写入文件即可,还可以通过参数配置格式化输出,匹配你期望的缩进格式:
// 序列化时指定Formatting.Indented输出带缩进的格式化JSON string json = JsonConvert.SerializeObject(aux, Formatting.Indented); // 直接写入文件 File.WriteAllText(@".\..\..\..\OutputData\" + art.FileNames[i] + ".json", json);
方案2:直接序列化字典对象到文件
不提前调用JsonConvert.SerializeObject,直接把原始字典对象传给JsonSerializer进行序列化:
using (StreamWriter sw = File.CreateText(@".\..\..\..\OutputData\" + art.FileNames[i] + ".json")) { JsonSerializer serializer = new JsonSerializer(); // 配置格式化输出 serializer.Formatting = Formatting.Indented; // 直接传入字典对象,不要传入提前序列化好的字符串 serializer.Serialize(sw, aux); }
内容的提问来源于stack exchange,提问作者Gabi5537
相关产品推荐
相关产品推荐

