提问人:Norex 提问时间:6/17/2022 更新时间:6/18/2022 访问量:99
DataTable 中的 Json 以数组形式返回单个元素
Json from DataTable returns single element as an array
问:
我正在尝试创建一个按 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"}]
答:
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]); }
评论