You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON反序列化报Invalid Json错误,求RestSharp+C#解决方案

解决沃尔玛API JSON反序列化「Invalid Json」错误的几个关键点

我之前也碰到过类似的坑,结合你的代码和场景,大概率是这几个原因导致的,一步步来排查:

1. 先修正URL里的HTML转义字符

你代码里的URL用了&分隔参数,这是HTML的转义字符,直接放在请求URL里会被RestSharp当成参数的一部分,导致沃尔玛API无法正确识别upc参数,返回的可能不是预期的JSON,而是错误页面(比如400 Bad Request的HTML),自然会触发「Invalid Json」错误。

把URL里的&换成普通的&:

string url = "http://api.walmartlabs.com/v1/items?apiKey=3zmwbajjf4ugzqhdtgsf59ac&upc=029986182548";

2. 确认API返回的内容是否是有效JSON

在反序列化之前,先打印或调试查看response.Content的内容,确认返回的是合法的JSON,而不是错误信息:

IRestResponse response = client.Execute(request);
// 调试时输出响应内容,验证是否为有效JSON
Console.WriteLine(response.Content);

// 同时检查请求是否成功
if (!response.IsSuccessful)
{
    Console.WriteLine($"请求失败,状态码:{response.StatusCode}");
    return;
}

如果这里输出的是HTML错误页面,那先解决请求本身的问题(比如参数错误、API密钥无效等)。

3. 反序列化的目标类型错误:单个对象 vs 数组

沃尔玛的/v1/items API返回的是商品数组(即使只匹配到单个商品,也是长度为1的数组),而你现在直接反序列化为单个WallMartData对象,会导致JSON结构不匹配,触发反序列化错误。

你需要把反序列化的目标改成List<WallMartData>:

var deserializer = new JsonDeserializer();
// 反序列化为列表
var wmrList = deserializer.Deserialize<List<WallMartData>>(response);

// 如果只需要第一个匹配的商品
var wmr = wmrList.FirstOrDefault();

或者用RestSharp更简洁的泛型请求方式:

var client = new RestClient(url);
var request = new RestRequest(Method.GET);
// 直接请求并反序列化为列表
var response = client.Execute<List<WallMartData>>(request);

if (response.IsSuccessful)
{
    var wmrList = response.Data;
    // 后续处理逻辑
}

4. 额外优化:模型类的字段兼容性

你用json2csharp生成的模型类基本没问题,但有几个小细节可以优化:

  • customerRating字段:如果API返回的是数值(比如4.5),可以改成double?类型(支持null值)
  • stock字段:如果可能返回null,改成string?(C# 8.0+)
  • 空的GiftOptions类可以保留,或者改成object类型,不影响反序列化

按照这几步调整后,应该就能解决你的「Invalid Json」错误了。

内容的提问来源于stack exchange,提问作者Nitika Pondith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:20:21