从C#SqlDataReader创建JsonResult

时间:2018-04-17 20:17:00

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

我需要将SqlDataReader序列化为Json。

我在互联网上研究了一些例子,然而,所有结果都是“文本”,而不是带有线条的对象。

我做错了什么?

我的实施:

public JsonResult Teste()
{
    using (SqlConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString))
    {
        db.Open();

        using (SqlCommand comando = new SqlCommand("select * from USERS", db))
        {
            using (SqlDataReader reader = comando.ExecuteReader())
            {
                DataTable dataTable = new DataTable();
                dataTable.Load(reader);  

                var resultado = JsonConvert.SerializeObject(dataTable);

                return Json(resultado, JsonRequestBehavior.AllowGet);
            }
        }
    }
}

我的结果:

"[{\"UsuarioID\":1,\"Email\":\"admin\",\"Nome\":\"SISTEMA\"},{\"UsuarioID\":2,\"Email\":\"marlon.tiedt@gmail.com\",\"Nome\":\"Marlon Tiedt\"},{\"UsuarioID\":3,\"Email\":\"marlon.tiedt@megasul.com.br\",\"Nome\":\"Marlon - Megasul\"}]"

期望的结果:

[{"UsuarioID":1,"Email":"admin","Nome":"SISTEMA"},{"UsuarioID":2,"Email":"marlon.tiedt@gmail.com","Nome":"Marlon Tiedt"},{"UsuarioID":3,"Email":"marlon.tiedt@megasul.com.br","Nome":"Marlon - Megasul"}]

3 个答案:

答案 0 :(得分:2)

双重编码输出,只需将 dataTable 对象传递给新的Json(...),它应该可以正常工作。请参阅下面的修改代码

public JsonResult Teste()
{
    using (SqlConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Conexao"]     .ConnectionString))
  {
    db.Open();
    using (SqlCommand comando = new SqlCommand("select * from USERS", db))
    {
        using (SqlDataReader reader = comando.ExecuteReader())
        {
            DataTable dataTable = new DataTable();
            dataTable.Load(reader);  
            return Json(dataTable, JsonRequestBehavior.AllowGet);
        }
    }
  }
}

答案 1 :(得分:0)

Json在内部序列化你传递给它的任何数据。在你的情况下,你传递序列化的字符串而不是实际数据,所以它在响应中添加斜杠。删除序列化并将对象直接传递给Json,你将获得正确的json响应

答案 2 :(得分:0)

priceTemplate: '<span class="price">Price - <%- data.formatted %></span>'