c# - 在 JsonConvert.SerializeObject 中自定义标识参数

标签 c# .net json.net

Json.Net中默认的ident好像是2个空格:

var result = JsonConvert.SerializeObject(jsonString, Formatting.Indented);

为清楚起见,我想将其更改为 4 个空格,但我似乎没有找到应用该属性的正确方法。它似乎存在,因为我找到了一些类似的代码(直接链接 here ):

using (JsonTextWriter jw = new JsonTextWriter(sw))
{
    jw.Formatting = Formatting.Indented;
    jw.IndentChar = ' ';
    jw.Indentation = 4;

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

...除此之外,如果可能的话,我希望避免在这种情况下不必要地处理流。

有什么建议吗?

最佳答案

我会创建一个实用类,用正确的缩进序列化它,类似于 JsonConvert.SerializeObject 的做法:

public static class JsonConvertEx
{
    public static string SerializeObject<T>(T value)
    {
        StringBuilder sb = new StringBuilder(256);
        StringWriter sw = new StringWriter(sb, CultureInfo.InvariantCulture);

        var jsonSerializer = JsonSerializer.CreateDefault();
        using (JsonTextWriter jsonWriter = new JsonTextWriter(sw))
        {
            jsonWriter.Formatting = Formatting.Indented;
            jsonWriter.IndentChar = ' ';
            jsonWriter.Indentation = 4;

            jsonSerializer.Serialize(jsonWriter, value, typeof(T));
        }

        return sw.ToString();
    }
}

然后像这样消费它:

class Program
{
    static void Main(string[] args)
    {
        var anon = new { Name = "Yuval", Age = 1 };
        var result = JsonConvertEx.SerializeObject(anon);
    }
}

关于c# - 在 JsonConvert.SerializeObject 中自定义标识参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33100164/

相关文章:

javascript - Razor 中传递给 JavaScript 的变量内的转义 '@' 字符

c# - 用于多方法配置的 AsyncLock

.net - Delphi 7 中的 Soap 信封 header 不包括 utf-8 编码。我该如何修改它?

datatable - .NET WebApi + 数据表

c# - Json 评估 - 重音问题

c# - 将对象直接序列化为 JObject 而不是 json.net 中的字符串

c# - 允许数据库更改

c# - 从 .NET C# 运行 Gulp 任务?

.net - 一台服务器可以有多个.Net框架吗?

.net - IIS 7 上的 net.tcp WCF 服务(mex 终结点)出现 "There is no compatible TransportManager found"错误