.net mvc——后台controller向前台传送json格式数据的问题

在使用layui.table组件时,用action向前端传table所需要的数据时,我将数据以json字符串的格式传给前端,但前端总是读取不到数据。所用的action方法如下:
        /// <summary>
        /// 获取table的json数据
        /// </summary>
        /// <returns></returns>
        public ActionResult GetJson()
        {
			//这里读取数据库中的数据
            SqlDataReader sdr = SqlHelper.ExecuteReader("select * from user_info");
			//该方法返回一个jsonarray格式的字符串
            string jts = SqlHelper.ToJsonArrayString(sdr);
            var result = new
            {
                code = 0,
                msg = "",
                count = "",
                data = jts
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

jts是一个json数组格式的字符串即[{},{}]这种格式,这样写前端的页面无法将data转化为jsonaArray格式的数据,从而无法正确显示数据

查找了许多原因和解决办法,要使前端能将数据正确解析成JsonArray对象数据,必须在后台传递时对json字符串进行反序列化(将json字符串转化为相应的对象或者List)
具体的json数组字符串转化为list可以参考上一篇博客:.net mvc——将json数组字符串转化为List(反序列化)
修改后可以正确传数据的action代码:
        /// <summary>
        /// 获取table的json数据
        /// </summary>
        /// <returns></returns>
        public ActionResult GetJson()
        {
            SqlDataReader sdr = SqlHelper.ExecuteReader("select * from user_info");
            string jts = SqlHelper.ToJsonArrayString(sdr);
            List<user_info> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<user_info>>(jts);
            var result = new
            {
                code = 0,
                msg = "",
                count = list.Count,
                data = list
            };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

后端向前端传递list对象,这时前端才可以正确解析数据

总结:

对于.net后台控制器的action向前台传json格式数据,如果直接传递json字符串,前端网页得不到json对象
1、如果服务器端完全采用微软的类,则要序列化的集合类通常使用List,返回时直接使用Json(list);则会自动将列表中的内容进行序列化,生成json字符串。
2、如果服务器端使用DataTable,则DataTable微软自己不能序列化,要使用Json(table)返回,是不能直接序列化的。还需要将行定义成对象。
3、直接使用Newtonsoft.json对数据进行序列化,得到json字符串。此时不能使用Json(str)的形式返回,这样返回的话,客户端不会识别为json。

 
 


参考:
asp.net MVC控制器返回json问题总结

发布了68 篇原创文章 · 获赞 12 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35077107/article/details/104271365