【问题标题】:JSON returned is empty in ASP.NET CORE WEB APIASP.NET CORE WEB API 中返回的 JSON 为空
【发布时间】:2021-10-05 07:47:03
【问题描述】:

我正在尝试学习 ASP.NET Web API。我设计了类似的代码,当请求(GET)到达控制器时,SP被触发,数据从数据集转换为数据表并以JSON格式返回。问题是当我尝试返回 JSON 时,响应变为空。

C#代码:

    [HttpGet]
    public IActionResult GetTodoItem()
    {
        try
        {
            DbConnect dbConnect = new DbConnect();
            DataSet ds = dbConnect.ExecuteSP2("View_Contacts");
            string results = dbConnect.DataTableToJSONWithJSONNet(ds.Tables[0]);
            dynamic json1 = JsonConvert.DeserializeObject(results);
            return this.Ok(json1);
        }
        catch (Exception ex)
        {
        return StatusCode(500,ex.Message);
        }

    }

回应:

需要示例 JSON:

[
  {
    "Contact": 6860,
    "Title_Movie": "Ayan",
    "Email_": "",
    "PhoneNumber": null,
    "Job": null,
    "Fax": null,
    "Picture_maxi": "",
    "Type": 2,
    "Company_Id": null,
    "School_Id": null,
    "Theatre_Id": null,
    "FirstName": "Stuart",
    "LastName": "",
    "PreferredName": null,
    "Status": 9,
    "Meter_Id": null,
    "Car_Id": null,
    "Business_Id": null
  }]

我怎样才能返回这个示例 json 。谢谢

【问题讨论】:

  • Empty 表示空字符串。为此,json1 本身必须为空。 实际响应是什么? json1实际 值是多少?而且,如果您查询数据库,为什么要尝试使用 DataTableToJSONWithJSONNet 将结果转换为 JSON,而不是让 ASP.NET Core 来做呢?
  • 如果您使用 Dapper 或 EF Core 之类的库来检索具有所需属性的对象,则可以直接返回它们。 ASP.NET Core 会将每个对象映射到一个 JSON 对象,每个公共属性映射到一个属性。
  • 可能是空的,因为你的查询结果是空的。在尝试任何其他转换之前,您是否尝试过记录 SP 调用的结果?
  • 我只需要将 ds.Tables[0] 作为 Json 返回。我得到的响应是 [ [ [ [] ], [ [] ]
  • 结果不为空

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:
  1. 数据表有一个扩展方法可以将它们作为 IEnumerable 返回。
  2. 如果您给 Ok Action 一个 IEnumerable,它将返回一个 JSON 对象。

在此之后,您可以将方法更改为这样,以便接收所需的输出:

[HttpGet]
    public IActionResult GetTodoItem()
    {
        try
        {
            DbConnect dbConnect = new DbConnect();
            DataSet ds = dbConnect.ExecuteSP2("View_Contacts");
            IEnumerable results = ds.Tables[0].AsEnumerable();
            return this.Ok(results);
        }
        catch (Exception ex)
        {
        return StatusCode(500,ex.Message);
        }

    }

【讨论】:

  • 抱歉,我收到错误 System.Text.Json.JsonException:检测到不支持的可能对象循环。这可能是由于循环或对象深度大于允许的最大深度 32。在 System.Text.Json.ThrowHelper.ThrowInvalidOperationException_SerializerCycleDetected(Int32 maxDepth)
  • @JoelAbraham 请使用以下代码忽略循环 json 序列化services.AddControllers().AddJsonOptions(x => x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);
  • 还是同样的错误
  • @JoelAbraham 您是否使用任何第三方库进行 JSON 序列化?
  • 不,我没有使用任何
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 2017-01-17
  • 2021-01-04
  • 2018-07-09
  • 1970-01-01
相关资源
最近更新 更多