C#调用Linguee API解析JSON数组失败,求错误排查方案
这个错误我之前排查过好几次,本质上就是你拿到的响应根本不是合法JSON——错误提示里说开头是'S',大概率是服务器返回了错误页面(比如Service Unavailable这类字符串,或者4xx/5xx的HTML错误页),不是你预期的Linguee数据JSON,所以Newtonsoft.Json根本没法解析。
给你一步步排查和解决的思路:
先看原始响应内容,别着急解析
先把API返回的原始字符串打出来看看,就能立刻知道问题在哪。比如在你的请求代码里加一段:using (var client = new HttpClient()) { var fullUrl = URL + urlParameters; var response = await client.GetAsync(fullUrl); // 先读取原始响应 var rawContent = await response.Content.ReadAsStringAsync(); Console.WriteLine(rawContent); // 直接输出看看是啥 // 再去做解析操作 }你十有八九会看到错误文本或者HTML,而不是JSON。
修正请求参数里的转义符
你的urlParameters里写了&,这是HTML里的转义字符,在C#字符串里应该直接用&!比如把?q=parler&src=fr&ds...改成?q=parler&src=fr&dest=en(补全你的目标语言参数),否则服务器会把&当成参数的一部分,识别不了正确的查询条件,自然返回错误。确认第三方API的可用性
你用的是第三方封装的Linguee API(heroku那个地址),Heroku免费实例经常会休眠、限流,或者这个封装API本身已经失效了。可以直接把拼接好的完整URL复制到浏览器里打开,看看返回的是不是合法的JSON。如果浏览器里也返回错误,那要么是API挂了,要么是参数还是不对。确保模型类和JSON结构匹配
等你拿到正确的JSON响应后,要确保你的C#模型类和real_examples数组的结构对应上。比如大概是这样的结构(具体字段要根据实际JSON调整):public class LingueeResponse { public List<Example> real_examples { get; set; } } public class Example { public string source_sentence { get; set; } public string target_sentence { get; set; } // 其他字段根据实际JSON添加 }
按照这个流程走,应该能快速定位并解决问题。
内容的提问来源于stack exchange,提问作者Leaf Leafword

