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

如何让C# Web API仅返回值而非键

解决方案

要实现只返回值而非键的JSON结构,你需要放弃直接返回DataSet或强类型对象(比如你的Roles类),因为它们序列化后会自动带上列名/属性名。可以按以下步骤修改代码:

  1. 构建值集合:把DataRow中的字段值按顺序存入object[]数组,再收集到列表中
  2. 包装返回结构:用匿名类包裹这个列表,保持外层的"Role"键

修改后的控制器代码示例:

public HttpResponseMessage Get()
{
    // 省略数据库连接、查询代码
    DataSet ds = new DataSet();
    sda.Fill(ds, "Role");

    List<object[]> roleValues = new List<object[]>();
    foreach (DataRow drow in ds.Tables[0].Rows)
    {
        // 处理Department的空值
        var department = drow["Department"] == DBNull.Value ? "No Department" : drow["Department"].ToString();
        // 按顺序把字段值存入数组
        roleValues.Add(new object[]
        {
            drow["PersonName"],
            drow["UserName"],
            drow["Profile"],
            drow["Level"],
            Convert.ToInt32(drow["Year"]),
            department
        });
    }

    // 返回匿名对象,外层保留"Role"键
    return Request.CreateResponse(HttpStatusCode.OK, new { Role = roleValues });
}

说明:

  • 你期望的示例中用{}包裹值是不符合JSON规范的,JSON对象必须包含键值对,所以正确的结构应该是用[](数组)来存储每一行的值,最终返回的JSON会是这样:
{
    "Role": [
        ["Test, Student1", "12345", "STUDENT", "UN", 1, "No Department"],
        ["Test, Student2", "678910", "STUDENT", "UN", 1, "No Department"]
    ]
}
  • 如果坚持要类似对象的格式(但JSON不允许无键对象),会导致前端解析异常,不建议这么做。

内容的提问来源于stack exchange,提问作者GBM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:25:33