C# 自定义JsonConvert.SerializeObject中的标识参数

C# 自定义JsonConvert.SerializeObject中的标识参数,c#,.net,json.net,C#,.net,Json.net,Json.Net中的默认标识似乎是2个空格: var result = JsonConvert.SerializeObject(jsonString, Formatting.Indented); 为了清楚起见,我想将它改为4个空格,但我似乎没有找到应用该属性的正确方法。它似乎存在,因为我发现了一些类似的代码(直接链接): …除了,如果可能的话,我希望避免在这种情况下不必要地处理流 有什么建议吗?我将创建一个实用程序类,用正确的缩进对其进行序列化,类似于JsonConvert.Serialize

Json.Net中的默认标识似乎是2个空格:

var result = JsonConvert.SerializeObject(jsonString, Formatting.Indented);
为了清楚起见,我想将它改为4个空格,但我似乎没有找到应用该属性的正确方法。它似乎存在,因为我发现了一些类似的代码(直接链接):

…除了,如果可能的话,我希望避免在这种情况下不必要地处理流


有什么建议吗?

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

旁注-你能说说你为什么关心JSON中的空格数量吗?可读性,编辑JSON。另外,我一直在努力寻找更好的方法用c#编辑json,但我发现的几个解决方案似乎很耗时,而且我不确定最终结果是否符合我的需要。我觉得可能会有一个更简单(但显然不容易找到)的解决方案集成到框架中,但是你的代码确实起到了作用,所以我将它标记为已回答。@XavierPeña我在Json.NET代码中查找了一些,没有发现任何突出的地方。
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);
    }
}