【问题标题】:asp.net mvc core how can I return a Json queryasp.net mvc 核心如何返回 Json 查询
【发布时间】:2016-02-16 21:39:11
【问题描述】:

首先我知道如何通过这样做返回一个 Json 查询

public JsonResult streams()
{
    using (var conn = new NpgsqlConnection(Connectionstring))
    {
        conn.Open();
        var credentials =  conn.Query<Streams>("select id,name from streams").ToList();                
        ViewData["Message"] = "Your application description page.";
        conn.Close();
        return Json(credentials);
    }
}

上面的代码从数据库中为我返回 Json,但是现在我实际上是通过将查询更改为此从 SQL 代码返回 Json

var credentials =  conn.Query<Streams>("select SELECT array_to_json(array_agg(t)) from (select id,name from streams) t").ToList();

这个新查询可以正常工作,但是它在控制器中返回 null,因为我现在有这样的情况

public JsonResult streams()
{
    using (var conn = new NpgsqlConnection(Connectionstring))
    {
        conn.Open();
        var credentials =  conn.Query<Streams>("SELECT array_to_json(array_agg(t)) from (select id,name from streams) t").ToList();            
        ViewData["Message"] = "Your application description page.";
        conn.Close();
        return Json(credentials);
    }
}

我该如何解决这个问题?我的假设是使用 JsonResult 并将 Json 作为操作返回会搞砸,因为 SQL 查询已经返回 Json。

这是我的流类

  public class Streams
    {
        [Key]
        public int id { get; set; }
        public string name { get; set; }
        public int profile_id { get; set; }

        public DateTime created_on { get; set; }
        public int last_reply { get; set; }
        public int comments { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public float latitudes { get; set; }
        public float longitudes { get; set; }
        public int votes { get; set; }
    }

【问题讨论】:

  • 您的 SQL 查询(在第二个示例中)结果集列是否与您的 Stream 属性名称匹配?可以分享一下结果集吗?
  • 它没有,这是我的流名称
  • 你为什么从你的 Sql 查询中返回 json。返回正常结果集,让 Json 方法负责将其转换为 JSON 格式
  • 我的印象是,从 SQL 代码返回 Json 比在应用程序中将其转换为 Json 效率更高,尤其是在请求很多时。

标签: c# json asp.net-mvc asp.net-core-mvc dapper


【解决方案1】:

这是因为您的字符串中有 Json,而对 this.Json(object) 的调用旨在将其序列化为 Json。

在 MVC 5 中,您可以:

return this.Content(credentials, "application/json");

ContentResult 类在 MVC Core 中,所以我假设语法保持不变。

【讨论】:

  • 非常感谢,这正是我所需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2018-11-17
  • 2021-12-31
相关资源
最近更新 更多