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

时间:2015-10-13 10:21:32

标签: c# .net json.net

Json.Net中的默认标识似乎是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());
}

...除非,如果可能的话,我会避免在这种情况下避免不必要地处理流。

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

我会创建一个实用程序类,使用正确的缩进对其进行序列化,类似于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);
    }
}