C#中双引号中的String.Format

4
有没有人能帮我处理下面这行代码中的 string.Format?我需要将 '2056' 作为 {0} 传递进去。
string body = @"{""idTimeSerie"":""2056"",""idTso"":-1}";

由于双引号的原因,我无法执行它。

我尝试了这种方式,但没有成功。

string body = string.Format
                    (@"{""idTimeSerie"": "" \"{0}\" "",""idTso"":-1}", countryID);

1
尝试将花括号 { 转义为 {{。 - aked
4个回答

4

您需要转义花括号

将 { 替换为 {{

string body = @"{{""idTimeSerie"":""2056"",""idTso"":-1}}";

编辑:来自MSDN - 另一种转义方式

大括号被解释为开始和结束格式项。因此,您必须使用转义序列来显示字面上的左括号或右括号。在固定文本中指定两个左括号(“{{”)来显示一个左括号(“{”),或者指定两个右括号(“}}”)来显示一个右括号(“}”)。格式项中的括号按照遇到的顺序依次解释。不支持解释嵌套的大括号。

int value = 6324;
string output = string.Format("{0}{1:D}{2}", 
                             "{", value, "}");
Console.WriteLine(output);
// The example displays the following output: 
//       {6324}

我尝试使用字符串字面量,但不知道为什么它不起作用...但是使用双{{括号它就可以工作了...:-) - user1990395
@allonhadaya,您好,我很尊敬您。是的,这个解决方案没有使用字符串格式化。如果您查看代码,开发人员尝试了使用和不使用字符串格式化,但最终使用了逐字字符串 @,并且他无法解决转义大括号的问题。一旦他解决了这个问题,剩下的问题就轻而易举了。我喜欢您提供的MSDN链接。 - aked
@simplecoder,实际上,他明确要求使用string.Format解决方案...“有人能帮我在下面的行中使用string.Format吗?我需要将'2056'作为{0}传递”。你的答案不允许他像string.Format({0})等方式传递countryID... - DGibbs

2
您可以像这样做:

您可以这样操作:

string body = string.Format("{{\"idTimeSerie\":\"{0}\",\"idTso\":-1}}", countryID);

你尝试运行过这个程序吗?由于嵌套的花括号,你可能会遇到InvalidFormatException错误。(我使用mono时遇到了这个问题) - allonhadaya

2
请尝试以下内容:

string body = string.Format(@"{{ ""idTimeSerie"": ""{0}"", ""idTso"": -1 ", countryID) + "}";

解释:

1) 使用字符串字面量的 @ 版本时,双引号用 "" 表示(两个连续的双引号)。

请参阅 MSDN:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

2) 使用{{}}来表示字符串格式中的文字{}

参见MSDN(转义大括号):

在固定文本中指定两个开括号("{{")以显示一个开括号("{"),或者指定两个闭括号("}}")以显示一个闭括号("}")。


我已经按照你说的尝试了不同的方法,但都没有用...字符串主体=string.Format(@"{""idTimeSerie"": """"{0}"""",""idTso"":-1}", countryID); - user1990395
string.Format(@"""idTimeSerie"":""{0}"",""idTso"":-1", 2056) 可以正常工作。 - Ferruccio
尝试使用更新的解决方案。第一次我没有注意到单个花括号。 - allonhadaya
抱歉再次打扰。我终于不再懒惰,尝试编译和运行它了。由于嵌套括号的问题,我将闭合括号移到了字符串格式之外。 - allonhadaya
@allonhadaya 我已经尝试了这种方法,伙计...看看解决方案字符串 body = string.Format(@"{{""idTimeSerie"": ""{0}"",""idTso"":-1}}", countryID); 无论如何,感谢你的时间。 - user1990395

-1
不要在这种情况下使用逐字字符串。我猜你想要的是:
string body = string.Format("{\"idTimeSerie\":\"{0}\",\"idTso\":-1}", countryID);

@simplecoder 正确,但是我在这个例子中没有使用原始字符串,对吧...? - DGibbs
@simplecoder 你必须将 { 转义为 {{,以便于 String.Format() 使用,而不是使用原始字符串字面量。请看我的回答。 - allonhadaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接