关于JSON:C#中的双引号不允许多行

Double quotes in c# doesn't allow multiline

例如

1
string str ="{"aps":{"alert":"" + title +"" + message +""}}";

我需要在可读性方面:

1
2
3
4
5
6
7
 string str ="
 {
   "
aps":
         {
             "
alert":"" + title +"" + message +""
         }
 }"
;

如何做到这一点,请提出建议。


如果您真的需要在字符串文字中这样做,我将使用逐字字符串文字(@前缀)。在逐字字符串文本中,需要使用""表示双引号。我也建议使用插入字符串文字,以使嵌入titlemessage更加清晰。这就意味着你需要把{{}}翻一番。所以你会有:

1
2
3
4
5
6
7
8
9
10
string title ="This is the title:";
string message ="(Message)";
string str = $@"
{{
  "
"aps"":
   {{
      "
"alert"":""{title}{message}""
   }}
}}"
;
Console.WriteLine(str);

输出:

1
2
3
4
5
6
{
  "aps":
   {
      "alert":"This is the title: (Message)"
   }
}

但是,这仍然比使用JSONAPI简单地构建JSON要脆弱得多——例如,如果标题或消息包含引号,那么最终会得到无效的JSON。我只使用json.net,例如:

1
2
3
4
5
6
7
8
9
10
string title ="This is the title:";
string message ="(Message)";
JObject json = new JObject
{
    ["aps"] = new JObject
    {
        ["alert"] = title + message
    }
};
Console.WriteLine(json.ToString());

在我看来,这不仅更干净,而且更健壮。


您可以使用x-tech所说的,在每行上使用附加的连接操作符("+"),或者使用符号"@":

1
2
3
4
5
6
7
 string str = @"
         {
           'aps':
                 {
                     'alert':'"
+ title +"" + message + @"'
                 }
         }"
;

因为它是一个JSON,所以可以使用单引号而不是双引号。

关于"@":C中的多行字符串文字#