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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:31:12