一尘不染

如何使用JSON.NET保存带有四个空格缩进的JSON文件?

json

我需要读取一个JSON配置文件,修改一个值,然后将修改后的JSON重新保存回该文件。JSON非常简单:

{
    "test": "init",
    "revision": 0
}

要加载数据并修改值,请执行以下操作:

var config = JObject.Parse(File.ReadAllText("config.json"));
config["revision"] = 1;

到目前为止,一切都很好; 现在,将JSON写回到文件中。首先,我尝试了这个:

File.WriteAllText("config.json", config.ToString(Formatting.Indented));

可以正确写入文件,但缩进只有两个空格。

{
  "test": "init",
  "revision": 1
}

从文档看来,在使用此方法时似乎无法传递任何其他选项,因此我尝试修改此示例,这将允许我直接设置Indentation和的IndentChar属性JsonTextWriter来指定缩进量:

using (FileStream fs = File.Open("config.json", FileMode.OpenOrCreate))
{
    using (StreamWriter sw = new StreamWriter(fs))
    {
        using (JsonTextWriter jw = new JsonTextWriter(sw))
        {
            jw.Formatting = Formatting.Indented;
            jw.IndentChar = ' ';
            jw.Indentation = 4;

            jw.WriteRaw(config.ToString());
        }
    }
}

但这似乎没有任何效果:文件仍然使用两个空格缩进写入。我究竟做错了什么?


阅读 375

收藏
2020-07-27

共1个答案

一尘不染

问题是您正在使用config.ToString(),因此使用编写对象时,该对象已经被序列化为字符串并进行了格式化JsonTextWriter

使用序列化器将对象序列化到写入器:

JsonSerializer serializer = new JsonSerializer();
serializer.Serialize(jw, config);
2020-07-27