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

如何在WebApi的JSON响应中添加类名标识?

解决方案

首先需要说明:你期望的JSON格式不符合JSON规范——数组元素不能是Data:{...}这种键值对结构,正确的目标格式应该是外层为对象,包含Data属性,其值为发票数组,示例如下:

{
  "Data": [
    {
      "ID": 1,
      "BillToName": "Kurian",
      "ClientName": "Fort Myers",
      "ClientCode": " C00687",
      "InvoiceNumber": "INV2484899",
      "InvoiceDate": "2023-05-18T00:00:00",
      "InvoiceDueDate": "2023-06-17T00:00:00",
      "AmountDue": " $110.00",
      "OFFC": "FTM",
      "DateImported": "2023-05-18T00:00:00",
      "DaysFromDueDate": 30
    },
    {
      "ID": 2,
      "BillToName": "Levine",
      "ClientName": "Fort Lauderdale",
      "ClientCode": " C00686",
      "InvoiceNumber": "INV2445218",
      "InvoiceDate": "2023-04-04T00:00:00",
      "InvoiceDueDate": "2023-05-04T00:00:00",
      "AmountDue": " $570.00",
      "OFFC": "FTL",
      "DateImported": "2023-05-19T00:00:00",
      "DaysFromDueDate": 30
    }
  ]
}

下面提供两种可行的实现方式:

方式一:自定义响应模型类

  1. 新建响应模型类(用于包装发票数组):
public class InvoiceResponse
{
    public List<Invoices> Data { get; set; }
}
  1. 修改控制器方法,返回该模型实例:
[HttpGet]
[Route("api/GetAllInvoices")]
public InvoiceResponse GetAll()
{
    var invoiceList = Data_Layer.GetAllInvoices();
    return new InvoiceResponse { Data = invoiceList };
}

方式二:使用匿名对象(无需额外建类)

直接在控制器中返回包装了数组的匿名对象,同时改用IActionResult返回类型(更符合ASP.NET WebAPI规范):

[HttpGet]
[Route("api/GetAllInvoices")]
public IActionResult GetAll()
{
    var invoiceList = Data_Layer.GetAllInvoices();
    return Ok(new { Data = invoiceList });
}

原理说明

你当前的API直接返回List<Invoices>,JSON序列化后会生成纯数组结构。要添加外层的标识性键名(即你说的“类名”),必须将数组包装在一个对象中,通过对象的属性来提供这个标识,这样序列化后的JSON才符合规范且满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:57:00