传入的无效数组,额外尾随','在c#中反序列化Json时出现这个错误.如何解决这个问题?
本文关键字:错误 何解决 问题 解决 数组 无效 反序列化 Json | 更新日期: 2023-09-27 18:07:06
这是我在最后一行得到错误的代码,我将json反序列化为c#对象。你能告诉我如何解决这个问题吗?
WebRequest req = WebRequest.Create(@"https://aaaaa.service-now.com/api/now/table/incident?sysparm_query=sys_updated_onBETWEENjavascript:gs.dateGenerate('2015-01-01','00:00:00')@javascript:gs.dateGenerate('2016-06-30','23:59:59')");
req.Method = "GET";
req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:password"));
req.ContentType = "application/xml";
HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
var responseValue = string.Empty;
using (var responseStream = resp.GetResponseStream())
{
if (responseStream != null)
using (var reader = new StreamReader(responseStream))
responseValue = reader.ReadToEnd();
}
JavaScriptSerializer ser = new JavaScriptSerializer();
ser.MaxJsonLength = 2147483647;
ser.RegisterConverters(new List<JavaScriptConverter> { new ResultConverter() });
**RootObject ro = ser.Deserialize<RootObject>(responseValue);
显然你的JSON是坏的,因为它有一个尾部逗号在数组中。如果这个JSON来自你无法控制的地方,你应该告诉他们修复他们的错误实现,或者你应该使用一个更宽容的JSON反序列化器(不幸的是,我没有一个推荐)。
然而,在此期间,如果我们做一些假设,你可以解决这个问题。最大的假设是您没有任何包含",]"或",}"的引号字段。如果这个假设是准确的,那么您可以使用一个简单的正则表达式来查找数组或对象末尾有逗号的地方,并删除它们:
//using System.Text.RegularExpressions
var rx = new Regex(@",('s*[']}])", RegexOptions.Multiline);
responseValue = rx.Replace(responseValue, "$1");
如果这是你自己的JSON,你可以自己编辑,然后打开notepad++或其他文本编辑器能够搜索与正则表达式和搜索",'s*[']}]
"(与"。匹配换行符(打开或等价)来查找错误的逗号。
我有这个例外,对我来说,我发现结尾有逗号字符。简单列表示例:
[
{ "id": "1234" },
{ "id": "5678" },
]
列表的最后一个元素以','结尾。我删除了这个,反序列化工作正常。