String.Format返回错误

时间:2013-07-30 09:04:48

标签: c# string.format

这让我摸不着头脑。

我有一个函数返回一个包含自动完成控件的类似json数据的字符串,但无法使String.Format起作用:

private string GetUsers(string crit)
{
    string result = "";

    using (DataTable dt = dl.GetRecordSet("select ob_id, ob_desc from objects where ac_id = @acid and ob_desc like @crit and ot_id = 29 and ob_deleted = 0 order by ob_desc", new[] { MyApplicationSession.AccountId, "%" + crit + "%" }))
    {
        result = "[ ";
        foreach (DataRow dr in dt.Rows)
        {
            result += string.Format("{ \"id\": \"{0}\", \"label\": \"{1}\", \"value\": \"{1}\" },", dr["ob_id"].ToString(), dr["ob_desc"].ToString());
        }

        result = result.Substring(0, result.Length - 1); // remove trailing comma
        result += "]";
    }
    return result;
}

我总是收到错误“Input string was not in a correct format.”。

dr["ob_id"].ToString()是一个整数,dr["ob_desc"].ToString()是SQL Server 2008数据库中的varchar。

Visual Studio也建议在“将字符串转换为DateTime ...”的故障排除提示下,不知道它从何处获取。

我尝试了一些变体,例如替换\“with',将\”替换为“”并将参数显式地转换为(字符串)。

我唯一能找到的工作就是将值直接放在字符串中并省略string.Format。

2 个答案:

答案 0 :(得分:5)

你有一些额外的花括号,这会使解析器混乱。像{{

一样逃脱它们
string.Format("{{ \"id\": \"{0}\", \"label\": \"{1}\", \"value\": \"{1}\" }},", ...

Related

答案 1 :(得分:0)

您已将{...}中的整个字符串包含在String.Format中,以输出实际的大括号,您需要执行{{}},如下所示:

result += string.Format("{{ \"id\": \"{0}\", \"label\": \"{1}\", \"value\": \"{1}\" }},", dr["ob_id"].ToString(), dr["ob_desc"].ToString());