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

.NET 6.0中使用Dapper从Oracle取数后返回多对象JSON的问题

解决方案

首先要修正你目标JSON的格式问题:fiche_avocats字段应该是单个数组包含所有对象,而不是多个独立数组,正确的结构如下:

{
    "metadata": [
        {
            "totalResult": "2",
            "timestamp": "1673347991"
        }
    ],
    "fiche_avocats": [
        {
            "nom": "doe",
            "pre": "john"
        },
        {
            "nom": "foo",
            "pre": "bar"
        }
    ]
}

要实现这个结构,最直接可靠的方式是创建强类型实体类,ASP.NET Core会自动将其序列化为符合要求的JSON,比Tuple灵活得多。

1. 创建实体类

在你的项目中添加以下类:

// 对应metadata里的单个项
public class MetadataItem
{
    public string totalResult { get; set; }
    public string timestamp { get; set; }
}

// 对应单个律师信息
public class AvocatFiche
{
    public string nom { get; set; }
    public string pre { get; set; }
}

// 根响应对象
public class AvocatResponse
{
    public List<MetadataItem> metadata { get; set; }
    public List<AvocatFiche> fiche_avocats { get; set; }
}

2. 修改控制器代码

调整GetDatas方法,构造上述实体类并返回:

[HttpGet]
[Route("api/GetDatas")]
public IActionResult GetDatas(string? nom = null, string? pre = null)
{
    var queryResult = userRepository.GetDatas(nom, pre);
    var totalResult = userRepository.GetDatasFullQueryResult(nom, pre);
    int timeStamp = (int)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;

    if (queryResult == null)
    {
        return NotFound(Tools.returnError("erreur lors de la récuperation des flux avocats, endpoint: api/GetDatas"));
    }

    // 构造响应对象
    var response = new AvocatResponse
    {
        metadata = new List<MetadataItem>
        {
            new MetadataItem
            {
                totalResult = totalResult.ToString(), // 转成字符串匹配目标格式
                timestamp = timeStamp.ToString()
            }
        },
        fiche_avocats = queryResult.Cast<AvocatFiche>().ToList()
        // 如果userRepository.GetDatas返回的已经是List<AvocatFiche>,直接赋值即可:
        // fiche_avocats = queryResult
    };

    return Ok(response);
}

说明

  • 强类型实体类能保证序列化后的JSON结构完全符合预期,避免Tuple带来的格式不可控问题
  • 如果userRepository.GetDatas返回的类型不是List<AvocatFiche>,需要确保查询结果的字段名和AvocatFiche的属性名一致(Dapper会自动映射),或者通过Dapper的别名查询来匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:50:19