我收到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" }
这种格式有什么问题?
答案 0 :(得分:7)
我想你想要:
var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);
注意加倍{{
和}}
这是将大括号字面输入输出所需的转义序列。
答案 1 :(得分:1)
尝试
var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);
答案 2 :(得分: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}}}”,用于显示左括号,a 格式化为十进制数的数值和右括号。但是,格式 item实际上按以下方式解释:
前两个开口大括号(“{{”)被转义并产生一个左大括号。
接下来的三个字符(“{0:”)被解释为格式项的开头。
下一个字符(“D”)将被解释为十进制标准数字格式说明符,但接下来的两个转义大括号(“}}”)会产生一个大括号。由于结果字符串(“D}”)不是标准数字格式说明符,因此结果字符串将被解释为自定义格式字符串,这意味着显示文字字符串“D}”。
最后一个大括号(“}”)被解释为格式项的结尾。
显示的最终结果是文字字符串“{D}”。将不显示要格式化的数值。
答案 3 :(得分:0)
您必须转义不属于格式的{
和}
字符。
string.Format("\"{0}\" : {{ {1} }}",.....)
请参阅此MSDN页面:
http://msdn.microsoft.com/en-us/library/txafckwd.aspx
打开和关闭括号被解释为开始和结束a 格式项。因此,您必须使用转义序列来显示 一个字面的开口支撑或关闭支撑。指定两个开口括号 (“{{”)在固定文本中显示一个左括号(“{”)或两个 关闭大括号(“}}”)以显示一个右大括号(“}”)。大括号 格式项按顺序依次解释 遇到。不支持解释嵌套大括号。
答案 4 :(得分:0)
您需要使用双括号转义要在输出中使用大括号的花括号:
public override string ToString()
{
var val = string.Format("\"{0}\" : {{ {1} }}", arrayName, fieldList);
return val;
}