0

我在列表对象内有一些对象形式的数据。现在我想将此数据序列化为 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 或手动)。我只想通过列表并获得上述内容。这有可能吗?目前,我正在序列化每个对象,通过遍历列表并运行一些替换、正则表达式替换和类似的操作,以获得所需的输出,具体取决于输入列表。有没有更简单的方法可以做到这一点,而无需编写自己的序列化方法?

4

1 回答 1

0

你好,我找到了一些可以帮助你启动特殊格式化程序的东西,我从这里将它从 javascript 翻译成 c#:https ://github.com/umbrae/jsonlintdotcom/blob/master/c/js/jsl.format.js

它在没有它们的情况下向 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; 


}
于 2012-09-24T23:02:22.223 回答