我需要读取一个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来指定缩进量:
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()); } } }
但这似乎没有任何效果:文件仍然使用两个空格缩进写入。我究竟做错了什么?
问题是您正在使用config.ToString(),因此使用编写对象时,该对象已经被序列化为字符串并进行了格式化JsonTextWriter。
config.ToString()
使用序列化器将对象序列化到写入器:
JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(jw, config);