C# 高级JSON序列化格式化选项

C# 高级JSON序列化格式化选项,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,我有一些对象形式的数据,在列表对象中。现在我想将这些数据序列化为JSON。为此,我(目前)正在使用JSON.NET。我的问题是 JsonConvert.SerializeObject(list, ...) 我似乎只能选择缩进整个内容,也就是每个键/值,或者根本不缩进 {"Variable1":1,"Variable2":"2"},{"Variable1":1,"Variable2":"2"},... or { "Variable1": 1, "Variable2": "2"

我有一些对象形式的数据,在列表对象中。现在我想将这些数据序列化为JSON。为此,我(目前)正在使用JSON.NET。我的问题是

JsonConvert.SerializeObject(list, ...)
我似乎只能选择缩进整个内容,也就是每个键/值,或者根本不缩进

{"Variable1":1,"Variable2":"2"},{"Variable1":1,"Variable2":"2"},...

or

{
    "Variable1": 1,
    "Variable2": "2"
},
{
    "Variable1": 1,
    "Variable2": "2"
},
...
我想得到这个:

{ "Variable1": 1, "Variable2": "2" },
{ "Variable1": 1, "Variable2": "2" },

但不必自己显式地编写每个键/值(JsonTextWriter或手动)。我只想通过列表,得到上面的信息。这有可能吗?目前,我正在逐个序列化每个对象,通过遍历列表,运行一些replaces、regex replaces和类似操作,以获得所需的输出,具体取决于输入列表。有没有更简单的方法,不用编写自己的序列化方法就可以做到这一点?

您好,我找到了一些东西,可以帮助您启动特殊的格式化程序 我从这里将它从javascript翻译成c#:

它在json字符串中添加空白,而不使用空白。 我认为您可以根据自己的需要修改此格式化程序

private static string PrettyPrinter_repeat(string s, int count) {
    string ns = "";

    for(int i = 0; i < count; i++) ns += s;
    return ns;
}

public static string PrettyPrinter(string json)
{
    int     i           = 0,
            il          = 0;

    string  tab         = "    ",
            newJson     = "";

    int     indentLevel = 0;
    bool    inString    = false;
    char    currentChar = default(char);


     for (i = 0, il = json.Length; i < il; i += 1) 
     {
        currentChar = json[i];

        switch (currentChar) {
        case '{': 
        case '[': 
            if (!inString) { 
                newJson += currentChar + "\n" + PrettyPrinter_repeat(tab, indentLevel + 1);
                indentLevel += 1; 
            } else { 
                newJson += currentChar; 
            }
            break; 
        case '}': 
        case ']': 
            if (!inString) { 
                indentLevel -= 1; 
                newJson += "\n" + PrettyPrinter_repeat(tab, indentLevel) + currentChar; 
            } else { 
                newJson += currentChar; 
            } 
            break; 

        case ',': 
            if (!inString) { 
                newJson += ",\n" + PrettyPrinter_repeat(tab, indentLevel); 
            } else { 
                newJson += currentChar; 
            } 
            break; 
        case ':': 
            if (!inString) { 
                newJson += ": "; 
            } else { 
                newJson += currentChar; 
            } 
            break; 
        case ' ':
        case '\n':
        case '\t':
            if (inString) {
                newJson += currentChar;
            }
            break;
        case '"': 
            if (i > 0 && json[i - 1] != '\\') {
                inString = !inString; 
            }
            newJson += currentChar; 
            break;
        default: 
            newJson += currentChar; 
            break;                    
        } 



     }

    return newJson; 


}
private static string PrettyPrinter\u repeat(string s,int count){
字符串ns=“”;
对于(int i=0;i0&&json[i-1]!='\\'){
inString=!inString;
}
newJson+=currentChar;
打破
违约:
newJson+=currentChar;
打破
} 
}
返回newJson;
}

您为什么关心格式?因为输出将由人工直接查看和编辑。在这种情况下,大文件、缺少空格等都是有问题的。嗯,我想避免写我自己的东西,但我想没有办法^^