c#中的双引号不允许多行

时间:2017-07-05 05:31:38

标签: c# json c#-4.0 c#-3.0

e.g。

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

我需要将其作为可读性:

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

如何实现这一点,请提出建议。

2 个答案:

答案 0 :(得分:16)

如果确实需要在字符串文字中执行此操作,我会使用逐字字符串文字(@前缀)。在逐字字符串文字中,您需要使用""来表示双引号。我也建议使用插值字符串文字,以使titlemessage的嵌入更清晰。这确实意味着你需要加倍{{}}。所以你有:

string title = "This is the title: ";
string message = "(Message)";
string str = $@"
{{
   ""aps"":
   {{
       ""alert"":""{title}{message}""
   }}
}}";
Console.WriteLine(str);

输出:

{
   "aps":
   {
       "alert":"This is the title: (Message)"
   }
}

然而,这仍然比使用JSON API简单地构建JSON更脆弱 - 例如,如果标题或消息包含引号,那么您最终会得到无效的JSON。我只是使用Json.NET,例如:

string title = "This is the title: ";
string message = "(Message)";
JObject json = new JObject
{
    ["aps"] = new JObject 
    { 
        ["alert"] = title + message 
    }
};
Console.WriteLine(json.ToString());

那个很多更清洁的IMO,以及更强大。

答案 1 :(得分:1)

您可以使用X-Tech所说的内容,在每一行使用其他连接运算符(' +'),或使用符号' @':

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

由于它是一个JSON,你可以使用单引号而不是双引号。

关于' @':Multiline String Literal in C#