DataTable 中的 Json 以数组形式返回单个元素

Json from DataTable returns single element as an array

提问人:Norex 提问时间:6/17/2022 更新时间:6/18/2022 访问量:99

问:

我正在尝试创建一个按 id 返回元素的 api 端点,但 JsonResult 从 DataTable 创建一个数组,该数组应该只有一个对象

[HttpGet("{id:int}")]
    public JsonResult GetUser(int id)
    {
        string query = @"select id,number,name,lastName from dbo.Users where id=" + id;
        DataTable table = new DataTable();
        string sqlDataSource = _configuration.GetConnectionString("UsersDb");
        SqlDataReader myreader;
        using (SqlConnection myCon = new SqlConnection(sqlDataSource))
        {
            myCon.Open();
            using (SqlCommand myComm = new SqlCommand(query, myCon))
            {
                myreader = myComm.ExecuteReader();
                table.Load(myreader);
                myreader.Close();
                myCon.Close();
            }
        }
        return new JsonResult(table);
    }    

但是,我得到这个结果时,两侧有方括号

[{"id":4,"number":10,"name":"Peter","lastName":"Peterson"}]
json .net API 数据表 jsonresult

评论


答:

0赞 Serge 6/18/2022 #1

试试这个

return new JsonResult(JArray.FromObject(dt).First())

结果

{"id":4,"number":10,"name":"Peter","lastName":"Peterson"}
-1赞 Charlieface 6/18/2022 #2

您可以只返回而不是整个表。table.Rows[0]

这里还有其他改进:

  • 参数化查询。不要将数据注入 SQL。
  • 缺少读者。using
  • 考虑使此功能async
      [HttpGet("{id:int}")]
      public JsonResult GetUser(int id)
      {
          const string query = @"#
      select
        id,
        number,
        name,
        lastName
      from dbo.Users
      where id = @id;
      ";
          DataTable table = new DataTable();
          string sqlDataSource = _configuration.GetConnectionString("UsersDb");
          using (SqlConnection myCon = new SqlConnection(sqlDataSource))
          using (SqlCommand myComm = new SqlCommand(query, myCon))
          {
              myComm.Parameters.Add("@id", SqlDbType.Int).Value = id;
              myCon.Open();
              using(var myreader = myComm.ExecuteReader())
              {
                  table.Load(myreader);
              }
          }
          return new JsonResult(table.Rows[0]);
      }