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

ASP.NET Core 6 API使用RestClient发送JSON对象遇格式错误如何解决?

问题解决:RestClient发送POST请求提示"Request Body should be a valid JSON object"

问题根源

你犯了一个常见的双重序列化错误:

  • 先用Newtonsoft.Json.JsonConvert.SerializeObject把匿名对象转成了JSON字符串
  • 又把这个字符串传给AddJsonBody方法,而AddJsonBody会自动对传入的参数做JSON序列化
  • 最终请求体变成了被引号包裹的字符串(比如"{\"first_name\":\"qqq\",...}"),服务器无法识别为合法的JSON对象

修正方案1:直接传入对象(推荐)

删除手动序列化步骤,直接把匿名对象传给AddJsonBody,方法会自动完成序列化并设置正确的Content-Type:

var client = new RestClient("https://customdomain/registrants");
// RestClient已指定基础地址,RestRequest无需重复写完整URL
var request = new RestRequest(Method.Post); 

request.AddHeader("authorization", @"Bearer " + token);

var obj = new
{
    first_name = "qqq",
    last_name = "yyy",
    email = "qqq@gmail.com"
};

// 直接传入对象,AddJsonBody自动处理序列化和Content-Type
RestResponse result = client.Execute(request.AddJsonBody(obj));

修正方案2:手动序列化后用AddStringBody

如果必须手动控制序列化逻辑(比如自定义Newtonsoft.Json配置),改用AddStringBody传入序列化后的字符串,并指定媒体类型:

var client = new RestClient("https://customdomain/registrants");
var request = new RestRequest(Method.Post); 

request.AddHeader("authorization", @"Bearer " + token);

var obj = new
{
    first_name = "qqq",
    last_name = "yyy",
    email = "qqq@gmail.com"
};

var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
// 用AddStringBody传入JSON字符串,并指定Content-Type为application/json
request.AddStringBody(jsonString, ContentType.Json);

RestResponse result = client.Execute(request);

额外配置(若偏好Newtonsoft.Json)

RestClient 110.x版本默认使用System.Text.Json做序列化,如果习惯用Newtonsoft.Json,可以全局配置序列化器:

var clientOptions = new RestClientOptions("https://customdomain/registrants")
{
    Serializer = new NewtonsoftJsonSerializer()
};
var client = new RestClient(clientOptions);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:17:37