Visual Studio 2022中ASP.NET Web API的JSON格式转换需求(无实体类)
如何在无实体类的ASP.NET Web API中修改JSON输出格式
我用Visual Studio 2022开发ASP.NET Web API,未为API定义实体类。当前接口返回的JSON为数组格式:
[{"Id":45,"Name":"Emily","Age":3},{"Id":19,"Name":"Peter","Age":1}]
需要将其转换为指定的包裹格式(比如常见的包含数据列表、总数的结构),现有实现代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Data; using System.Data.SqlClient; using Newtonsoft.Json; namespace ApiTesting.Controllers { public class TestController : ApiController { SqlConnection con = new SqlConnection(@"server=DESKTOP-US2AF5N; database=dbTest; Integrated Security = true;"); public string Get() { SqlDataAdapter da = new SqlDataAdapter("Select * From tblTest", con); DataTable dt = new DataTable(); da.Fill(dt); if (dt.Rows.Count > 0) { return JsonConvert.SerializeObject(dt); } else { return "No Data Found"; } } }
解决方案
无需定义实体类,可通过匿名类构造目标输出结构,同时推荐使用Web API标准的IHttpActionResult返回类型替代直接返回字符串,更符合接口规范。
修改后的代码示例:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Data; using System.Data.SqlClient; using Newtonsoft.Json; namespace ApiTesting.Controllers { public class TestController : ApiController { SqlConnection con = new SqlConnection(@"server=DESKTOP-US2AF5N; database=dbTest; Integrated Security = true;"); public IHttpActionResult Get() { SqlDataAdapter da = new SqlDataAdapter("Select * From tblTest", con); DataTable dt = new DataTable(); da.Fill(dt); if (dt.Rows.Count > 0) { // 按需求构造目标格式的匿名类,可自由调整字段 var result = new { total = dt.Rows.Count, data = dt }; return Ok(result); // 自动处理JSON序列化并返回200状态码 } else { return Content(HttpStatusCode.NotFound, "No Data Found"); // 返回404状态码及提示 } } } }
关键说明
- 根据实际需求调整匿名类结构即可适配不同的目标格式,比如需要增加状态码、提示信息:
var result = new { code = 200, message = "查询成功", data = new { list = dt, totalCount = dt.Rows.Count } }; - 使用
IHttpActionResult替代字符串返回,能自动处理HTTP状态码和内容协商,无需手动调用序列化方法。
内容的提问来源于stack exchange,提问作者Reborn
相关产品推荐
相关产品推荐

