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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:58:32