c# - 使用Newtonsoft如何避免 ":"后的tailing space空间

标签 c# json.net

使用 JSON 写入文件后

File.WriteAllText(fileName, JsonConvert.SerializeObject(jsonToWrite, Formatting.Indented)). 

我在每个“:”之后得到一个尾部空格。如何避免?

当前为红色,预计为绿色 enter image description here

最佳答案

添加空格的代码位于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 });

如果您确切地知道每次要使用的设置,则可以简化一些代码。

dotnetfiddle

关于c# - 使用Newtonsoft如何避免 ":"后的tailing space空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68571220/

相关文章:

c# - [InvalidCastException : Unable to cast object of type 'System.DBNull' to type 'System.String' .]

C# 7.2 对运算符使用 "in parameter"

c# - REST API 包装器设计 : returning dynamic json as JSON. NET JObject/JArray

c# - 在 C# 中向 json 对象添加属性

c# - ServiceStack.Text 没有按预期序列化我的对象

c# - 如何在 C# 中拥有配置文件的不同部分

c# - 如何基于数组列表创建动态按钮

c# - 使用 Newtonsoft.Json,getter 中属性的支持字段是什么

c# - JSON 中的 ASP.NET Web API 日期格式未成功序列化

javascript - 来自 Url.Content 的不匹配 Url