String.Format:输入字符串的格式不正确

jam*_*123 33 .net c# string.format exception-handling

下面的代码一直给我一个错误,说输入字符串的格式不正确,但我很确定它是对的,不是吗?

int id = 112;

String[] newData = { "1", "2", "21", "reidb", "reidb", "reidb", "reidb", "aa", 
                      "Some description", "11", "2012-02-28", "2012-01-29", "true", "1", "1", 
                      "true", "note note note", "true", "1", "2011-12-03", "45"};

String data = "{ cmd: \"save magellan deal\", data: { id: {0} , AId: {1}, " +
            "CId: {2}, CCId:{3}, LA: \"{4}\", BA: \"{5}\" , " +
            "LSA: \"{6}\" , BSA: \"{7}\" , \"path: \"{8}\"," +
            "dscp: \"{9}\", SI: \"{10}\", CD: \"{11}\", " +
            "period: \"{12}\", IsStatic: {13}, LSD: {14}, LC: {15}, RB: {16},} " +
            "Notes: \"{17}\", IsEE: {18}, RBy: {19}, DPDD: \"{20}\", LId: {21} } }";


String cmd = String.Format(data, id.toString(), newData);
Run Code Online (Sandbox Code Playgroud)

任何想法?

===编辑===

修复大括号后,"索引(从零开始)"的新错误必须大于或等于零且小于参数列表的大小.给出.newData有21加上id.toString(),应该是22吗?

Céd*_*non 72

在格式字符串中转义"{","}"(通过复制它们):

"{{ cmd: \"save magellan deal\", data: {{ id: {0} , AId: {1}, " +
"CId: {2}, CCId:{3}, LA: \"{4}\", BA: \"{5}\" , " +
"LSA: \"{6}\" , BSA: \"{7}\" , \"path: \"{8}\"," +
"dscp: \"{9}\", SI: \"{10}\", CD: \"{11}\", " +
"period: \"{12}\", IsStatic: {13}, LSD: {14}, LC: {15}, RB: {16},}} " +
"Notes: \"{17}\", IsEE: {18}, RBy: {19}, DPDD: \"{20}\", LId: {21} }} }}"
Run Code Online (Sandbox Code Playgroud)

并且您在格式字符串中有22个元素,在数组中有21个元素.

  • 似乎是一个非常好的理由完全放弃这种方法,并简单地使用JSON编码器与一些快速敲击匿名对象.容易发生错误. (2认同)

Eri*_* J. 8

newData中有21个元素,但使用22个占位符(编号为0到21).

此外,您必须在输入数据中转义文字"{"

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

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