C# web api返回类型设置为json的两种方法


在C#中,特别是在使用ASP.NET Core来构建Web API时,将返回类型设置为JSON格式是非常常见的需求。下面介绍两种实现这一需求的方法:

### 方法一:使用`IActionResult`接口及其实现类

ASP.NET Core提供了`IActionResult`接口,以及一系列实现了这个接口的类,用于处理HTTP响应。其中,`OkObjectResult`、`JsonResult`等类可以用来直接返回JSON格式的数据。

#### 示例代码:


using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // 使用OkObjectResult返回JSON
    [HttpGet("get-with-okobjectresult")]
    public IActionResult GetWithOkObjectResult()
    {
        var data = new { Name = "John Doe", Age = 30 };
        return Ok(data); // 这里的Ok方法内部会处理为JSON格式
    }

    // 使用JsonResult直接返回JSON
    [HttpGet("get-with-jsonresult")]
    public IActionResult GetWithJsonResult()
    {
        var data = new { Name = "Jane Doe", Age = 25 };
        return new JsonResult(data); // 直接返回JsonResult对象
    }
}

### 方法二:配置全局的返回类型格式

在ASP.NET Core中,可以通过配置Startup.cs文件中的服务集合来全局设置API的返回类型格式。这样,在控制器中就不需要显式地指定返回类型为JSON了。

#### Startup.cs配置示例:


public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.WriteIndented = true; // 设置JSON输出为缩进格式,便于阅读
        });

    // 其他服务配置...
}

完成上述配置后,在控制器中直接返回对象或`ActionResult`的派生类时,ASP.NET Core会自动将返回的数据序列化为JSON格式。


[HttpGet("get-with-no-explicit-json")]
public ActionResult<MyData> GetWithNoExplicitJson()
{
    var data = new MyData { Name = "Anonymous", Age = 0 };
    return data; // ASP.NET Core会将其自动序列化为JSON
}

public class MyData
{
    public string Name { get; set; }
    public int Age { get; set; }
}

以上就是在C# Web API中设置返回类型为JSON的两种方法。