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
相关产品推荐
相关产品推荐

