【发布时间】:2013-01-29 00:19:11
【问题描述】:
以下代码一直给我错误提示输入字符串的格式不正确,但我很确定它是正确的,不是吗?
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);
有人有什么想法吗?
=== 编辑 ===
修复大括号后,出现“索引(从零开始)必须大于或等于零且小于参数列表的大小”的新错误。给出。 newData 有 21,加上 id.toString(),应该是 22?
【问题讨论】:
-
您需要转义花括号。对 json 数据 '{{' 使用两个。
-
你的格式是什么..?查看如何使用 string.Format
-
就我个人而言,我根本不会使用
string.Format——它只是无缘无故地增加了复杂性。您无法快速判断哪个参数适用于哪个占位符。字符串连接具有相同的语义,没有要记住的转义规则,甚至更快 - 然后您实际上可以看到您正在插入的变量的上下文,我认为这在实际程序中具有一定的意义。 -
@EamonNerbonne:我同意复杂性,但不同意速度。字符串在 C# 中是不可变的,因此在这种情况下进行多个字符串连接可能会更慢。但是,对于大多数用例而言,性能差异可能并不重要,因此我更倾向于使用更清晰、更易于维护的代码而不是 String.Format。
-
这是非常糟糕的代码。您是否至少考虑过使用真正的 json 序列化程序?
标签: c# .net exception-handling string.format