如何在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 } ] }
下面提供两种可行的实现方式:
方式一:自定义响应模型类
- 新建响应模型类(用于包装发票数组):
public class InvoiceResponse { public List<Invoices> Data { get; set; } }
- 修改控制器方法,返回该模型实例:
[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
相关产品推荐
相关产品推荐

