Newtonsoft.Json反序列化报Invalid JavaScript property identifier错误如何修复
错误原因
你手动拼接的JSON格式不符合规范:EntityIDsList对应的是数组类型,你直接拼接了逗号分隔的数值,没有用方括号[]包裹,最终生成的paramList实际内容为:
{'ProjectId':202, 'EntityIDsList': 2000,2001,2002}
Newtonsoft.Json解析到2000后的逗号时,会默认后续内容是下一个JSON属性名,碰到直接跟的数值2001就会抛出非法属性标识符的异常。
修复方案
方案1:快速修改拼接逻辑
给EntityIDsList对应的数值部分加方括号包裹即可:
var paramList = @"{'ProjectId':" + id + ", 'EntityIDsList': [" + stringOfIds + "]}";
修改后生成的JSON符合数组格式,可正常解析。
方案2:推荐:避免手动拼接JSON
手动拼接JSON极易出现转义、格式类错误,更稳妥的做法是直接构造目标对象,不需要走JSON序列化反序列化流程:
var parameters = new Dictionary<string, object> { {"ProjectId", id}, {"EntityIDsList", list} };
如果确实有生成JSON字符串的需求,也可以通过序列化匿名对象的方式生成,完全避免手动拼写错误:
var paramObj = new { ProjectId = id, EntityIDsList = list }; string paramList = JsonConvert.SerializeObject(paramObj); var parameters = JsonConvert.DeserializeObject<Dictionary<string, object>>(paramList);
内容的提问来源于stack exchange,提问作者anthino12
相关产品推荐
相关产品推荐

