【问题标题】:Double quotes in c# doesn't allow multilinec#中的双引号不允许多行
【发布时间】:2017-07-05 05:31:38
【问题描述】:

例如

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

为了可读性,我需要使它:

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

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

【问题讨论】:

  • 你可以用单引号代替双引号。
  • @X-TECH:如果 OP 想要以有效的 JSON 结束,则不会。

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


【解决方案1】:

如果您真的需要在字符串文字中执行此操作,我会使用逐字字符串文字(@ 前缀)。在逐字字符串文字中,您需要使用 "" 来表示双引号。我建议也使用插值字符串文字,以使 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,并且更健壮。

【讨论】:

  • @furqanms:对不起,我不明白你的意思。我给出的代码不会产生任何额外的大括号,并且不清楚您使用的是什么代码。
  • 抱歉,这是我的错误,JObject 的可读性很好,谢谢@Jon Skeet
  • 你的 Json.NET 对我来说是正确的答案,它对我有用,也让我在开发应用程序的过程中摆脱了困境,所以感谢分享
【解决方案2】:

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

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

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

关于“@”:Multiline String Literal in C#

【讨论】:

  • 注意这里的@也需要在最后的第三行,因为一个新的多行字符串正在开始。每当您开始一个新的多行字符串时,请输入“@”符号。
  • 单引号在 JSON 中并不是真正有效的。它们在许多解析器中工作,但它们违反了tools.ietf.org/html/rfc7159
  • @JonSkeet 感谢您指出这一点。但我不明白如何只使用双引号并在不使用单引号的情况下拥有一个干净的多行字符串......
  • 查看我的答案以了解几个选项。
  • @JonSkeet 感谢您的回答,今天学到了新东西。
猜你喜欢
  • 2012-05-07
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2021-08-27
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多