C#函数返回JSON问题:类型转换错误及找不到Json方法
问题解决方法
错误原因
你的方法返回类型是Task<IActionResult>,但实际返回的是手动序列化后的string类型,类型不匹配导致报错。而且手动序列化完全没必要,ASP.NET Core框架已经提供了现成的方法处理JSON返回逻辑。
修正步骤
- 添加必要命名空间:
Json()方法属于Microsoft.AspNetCore.Mvc命名空间,在代码文件顶部添加:using Microsoft.AspNetCore.Mvc; - 移除手动序列化代码:直接返回查询到的对象,框架会自动完成JSON序列化操作。
修正后的完整代码:
using Microsoft.AspNetCore.Mvc; public async Task<IActionResult> GetCurrencyAsync() { var currencies = await _ripple_primary_context.RipplCurrencies .Select(p => new { p.CurrencyId, p.CurrencyName }) .ToListAsync(); return Json(currencies); }
额外优化(API控制器场景)
如果你的控制器是API控制器(标记了[ApiController]),推荐使用Ok()方法返回,这会自动生成符合REST规范的200状态码JSON响应:
using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/currency")] public class CurrencyController : ControllerBase { private readonly YourDbContext _ripple_primary_context; public CurrencyController(YourDbContext ripplePrimaryContext) { _ripple_primary_context = ripplePrimaryContext; } [HttpGet] public async Task<IActionResult> GetCurrencyAsync() { var currencies = await _ripple_primary_context.RipplCurrencies .Select(p => new { p.CurrencyId, p.CurrencyName }) .ToListAsync(); return Ok(currencies); } }
内容的提问来源于stack exchange,提问作者Jason_Hough
相关产品推荐
相关产品推荐

