3

我收到 System.FormatException:运行此方法时输入字符串的格式不正确。

字段的值:

arrayName = "requester";
fieldList = "\"name\" : \"shimshon\""; // "name" : "shimshon"


public override string ToString()
{
   var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList);

   return val;
}

该方法的预期结果是

"requester" : { "name" : "shimshon" }

这种格式有什么问题?

4

5 回答 5

7

我想你想要:

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

请注意 double{{}}which 是将大括号从字面上输入输出所必需的转义序列。

于 2013-07-31T14:30:17.600 回答
1

尝试

var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);
于 2013-07-31T14:31:20.497 回答
1

改变:

public override string ToString()
{
    var val = string.Format("\"{0}\" : { {1} }", arrayName, fieldList);

    return val;
}

上:

public override string ToString()
{
   var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

   return val;
}

转义大括号的解释方式可能会导致意想不到的结果。例如,考虑格式项“{{{0:D}}}”,它旨在显示一个左大括号、一个格式化为十进制数的数值和一个右大括号。但是,格式项实际上是按以下方式解释的:

  • 前两个左大括号(“{{”)被转义并产生一个左大括号。

  • 接下来的三个字符(“{0:”)被解释为格式项的开始。

  • 下一个字符(“D”)将被解释为 Decimal 标准数字格式说明符,但接下来的两个转义大括号(“}}”)产生一个大括号。因为结果字符串 ("D}") 不是标准数字格式说明符,所以结果字符串被解释为自定义格式字符串,这意味着显示文字字符串 "D}"。

  • 最后一个大括号 ("}") 被解释为格式项的结尾。

  • 显示的最终结果是文字字符串“{D}”。不显示要格式化的数值。

于 2013-07-31T14:33:17.630 回答
0

您必须转义不属于格式的{和字符。}

string.Format("\"{0}\" : {{ {1} }}",.....)

请参阅此 MSDN 页面:

http://msdn.microsoft.com/en-us/library/txafckwd.aspx

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

于 2013-07-31T14:30:42.467 回答
0

您需要使用双括号转义要在输出中成为大括号的大括号:

public override string ToString()
{
   var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);

   return val;
}
于 2013-07-31T14:31:07.900 回答