如何在string.Format中使用大括号?生成指定JSON遇格式异常
问题描述
需要生成结构为 {"document_ids":[23461504,20639162,20395579]} 的JSON字符串,原有实现代码如下:
var json = "{\"document_ids\":" + JsonConvert.SerializeObject(MyList<long>) + "}";
尝试用string.Format简化代码,编写如下:
var json = string.Format("{\"document_ids\":{0}}", JsonConvert.SerializeObject(MyList<long>));
但运行时抛出异常:System.FormatException: 'Input string was not in a correct format.'
解决方法
原因分析
string.Format会将字符串中的单花括号{}识别为格式占位符进行解析,你代码里的{"document_ids":...}中的普通花括号未做转义,导致解析逻辑混乱,抛出格式异常。
修正方案1:转义花括号
将格式字符串中的普通花括号替换为双花括号{{和}}来完成转义,修改后的代码如下:
var json = string.Format("{{\"document_ids\":{0}}}", JsonConvert.SerializeObject(MyList<long>));
更优方案:直接序列化匿名对象
手动拼接或格式化JSON字符串容易出现转义错误,更稳妥的方式是直接让序列化工具处理——定义一个匿名对象,直接序列化即可:
var json = JsonConvert.SerializeObject(new { document_ids = MyList<long> });
这种方式无需手动处理引号、花括号的转义,序列化工具会自动生成符合JSON规范的字符串,代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Yaser Nouri
相关产品推荐
相关产品推荐

