我在列表对象中有一些对象形式的数据。现在我想将这些数据序列化为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或手动)。我只想通过列表并获得上述内容。这有点可能吗?目前,我将每个对象分开,通过列表,运行一些替换,正则表达式替换等,以获得所需的输出,具体取决于输入列表。有没有更简单的方法来做这个,而不编写自己的序列化方法?
答案 0 :(得分: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;
}