2012-09-11 46 views
0

我有一些数据以对象的形式出现在列表对象中。现在我想将这些数据序列化为JSON。为此,我(当前)使用JSON.NET。我的问题是,随着高级JSON序列化格式化选项

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或手动)。我只想通过列表并获得上述内容。这是否有可能?目前,我正通过浏览列表逐个序列化每个对象,并运行一些替换,使用正则表达式替换等,以获得所需的输出,具体取决于输入列表。有没有更简单的方法来做到这一点,而无需编写自己的序列化方法?

+1

为什么你关心格式化? – svick

+1

因为输出将被人类直接查看和编辑。在这种情况下,巨大的文件,缺失的空间等是有问题的。 – Mars

回答

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; 


} 
+0

嗯,我想避免写我自己的东西,但我想这是无法绕过它^^ – Mars