ASP.NET中如何修复Cannot convert Newtonsoft.Json.JsonConverter转换错误?
修复ASP.NET接口调用中的Cannot convert Newtonsoft.Json.JsonConverter错误
错误代码
public async Task<IActionResult> SiparisEkle(int userID, [FromQuery] int[] productIDs, [FromQuery] short[] quantities) { using (var httpClient = new HttpClient()) { StringContent content = new StringContent(JsonConvert.SerializeObject(userID, productIDs, quantities), Encoding.UTF8, "application/json"); using (var cevap = await httpClient.PutAsync($"{uri}/api/Order/SiparisEkle", content)) { string apiCevap = await cevap.Content.ReadAsStringAsync(); } } return RedirectToAction("Index"); }
错误原因
问题出在JsonConvert.SerializeObject的调用逻辑上:该方法的第二个参数要求传入JsonConverter类型对象,而非多个待序列化的参数。直接把userID、productIDs、quantities三个值作为参数传入,会触发参数类型不匹配,导致Cannot convert Newtonsoft.Json.JsonConverter错误。
修复后的代码
[HttpPost] public async Task<IActionResult> SiparisEkle(int userID, [FromQuery] int[] productIDs, [FromQuery] short[] quantities) { Order newOrder = new Order(); newOrder.UserID = userID; newOrder.Status = Status.Pending; newOrder.isActive = true; using (var httpClient = new HttpClient()) { StringContent content = new StringContent(JsonConvert.SerializeObject(newOrder), Encoding.UTF8, "application/json"); using (var cevap = await httpClient.PutAsync($"{uri}/api/Order/SiparisEkle", content)) { string apiCevap = await cevap.Content.ReadAsStringAsync(); } } return RedirectToAction("Index"); }
修复思路
把需要传递的接口参数封装为实体类(示例中为Order),将userID等数据赋值给实体对象的对应属性,再对整个实体对象进行序列化。这种方式既符合JsonConvert.SerializeObject的参数要求,也能正确构造接口所需的JSON请求体。
内容的提问来源于stack exchange,提问作者Oğuz
相关产品推荐
相关产品推荐

