0

这让我摸不着头脑。

我有一个函数,它返回一个包含类似 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 ...”时,不知道它是从哪里得到的。

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

我发现唯一可行的是将值直接放在字符串中并省略 string.Format。

4

2 回答 2

5

你有一些额外的花括号,这会使解析器感到困惑。像这样逃脱它们{{

string.Format("{{ \"id\": \"{0}\", \"label\": \"{1}\", \"value\": \"{1}\" }},", ...

相关

于 2013-07-30T09:06:42.307 回答
0

您已将整个字符串封装在{...}, in 中String.Format,以输出实际的花括号,您需{{要这样做}}

result += string.Format("{{ \"id\": \"{0}\", \"label\": \"{1}\", \"value\": \"{1}\" }},", dr["ob_id"].ToString(), dr["ob_desc"].ToString());
于 2013-07-30T09:08:48.253 回答