使用 JSON 写入文件后
File.WriteAllText(fileName, JsonConvert.SerializeObject(jsonToWrite, Formatting.Indented)).
我在每个“:”之后得到一个尾部空格。如何避免?
最佳答案
添加空格的代码位于JsonTextWriter.WriteIndentSpace
中,由标准的JsonWriter
调用。
一个可能的选择是编写您自己的 JsonTextWriter
派生类,覆盖 WriteIndentSpace
并且不在其中执行任何操作。
class MyWriter : JsonTextWriter
{
public MyWriter(TextWriter sw) : base(sw)
{ }
protected override void WriteIndentSpace()
{ }
}
然后您需要编写自定义序列化代码才能实际使用此编写器
static string Convert(object value, JsonSerializerSettings settings)
{
JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(settings);
StringBuilder sb = new StringBuilder(256);
StringWriter sw = new StringWriter(sb, CultureInfo.InvariantCulture);
using (var jsonWriter = new MyWriter(sw))
{
jsonWriter.Formatting = jsonSerializer.Formatting;
jsonSerializer.Serialize(jsonWriter, value, null);
}
return sw.ToString();
}
然后您可以使用您想要的任何设置调用它,并且永远不会插入 IndentSpace
。
var json = Convert(myObject, new JsonSerializerSettings{ Formatting = Formatting.Indented });
如果您确切地知道每次要使用的设置,则可以简化一些代码。
关于c# - 使用Newtonsoft如何避免 ":"后的tailing space空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68571220/