我遇到错误输入字符串的格式不正确
这是我的字符串
string requestData = string.Format("{\"api_version\":{0},\"method\":\"{1}\",\"merchant_account\":\"{2}\",\"merchant_password\":\"{3}\",\"transaction_unique_id\":\"{4}\",\"amount\":{5},\"currency\":\"{6}\",\"callback_url\":\"{7}\",\"user_id\":\"{8}\",\"user_ip\":\"{9}\",\"user_email\":\"{10}\",\"card\":{\"card_number\":\"{11}\"}", apiVersion, method, merchantAccount, merchantPassword, transactionId, amount, currency, callbackUrl, id, ip, mail, cardNumber);
所有变量都是字符串,没有类型转换。这段代码有什么问题?
答案 0 :(得分:7)
您需要使用{
转义string.Format()
符号:
代替{
使用{{
代替}
使用}}
注意:这适用于要出现在结果字符串中的{
符号。
此外,如果您要创建JSON,我强烈建议您使用JSON.Net和Serialize<>
,而不要像这样手动进行。
答案 1 :(得分:2)
您还可以使用String插值,此功能在C#6和更高版本中可用
string requestData = $"{{\"api_version\":{apiVersion},\"method\":\"{method}\",\"merchant_account\":\"{merchantAccount}\",\"merchant_password\":\"{merchantPassword}\",\"transaction_unique_id\":\"{transactionId}\",\"amount\":{amount},\"currency\":\"{currency}\",\"callback_url\":\"{callbackUrl}\",\"user_id\":\"{id}\",\"user_ip\":\"{ip}\",\"user_email\":\"{mail}\",\"card\":{{\"card_number\":\"{cardNumber}\"}}";
答案 2 :(得分:1)
如果每个期望的参数都是一个字符串,则说明api版本缺少引号!
string requestData = string.Format("{{\"api_version\":\"{0}\",\"method\":\"{1}\",\"merchant_account\":\"{2}\",\"merchant_password\":\"{3}\",\"transaction_unique_id\":\"{4}\",\"amount\":{5},\"currency\":\"{6}\",\"callback_url\":\"{7}\",\"user_id\":\"{8}\",\"user_ip\":\"{9}\",\"user_email\":\"{10}\",\"card\":{{\"card_number\":\"{11}\"}}}}", apiVersion, method, merchantAccount, merchantPassword, transactionId, amount, currency, callbackUrl, id, ip, mail, cardNumber);
编辑:我没有注意到缺少的双精度{},当您使用字符串格式时,必须将每个{
或}
都加倍以使其逃逸