asp.net MVC控制器返回json問題總結
阿新 • • 發佈:2019-01-23
在MVC專案中,經常需要在控制器中向客戶端返回json資料,常見的返回方法如下:
1、如果伺服器端完全採用微軟的類,則要序列號的集合類通常使用List<T>,返回時直接使用Json(list);則會自動將列表中的內容進行序列號,生成json字串。
2、如果伺服器端使用DataTable,則DataTable微軟自己不能序列號,很奇怪!要使用Json(table)返回,是不能直接序列號的。還需要將行定義成物件,如:
----------------------------------class Person { public string username { get; set; } public string truename { get; set; } public int age { get; set; } }
List<Person> list = new List<Person>(); DataTable dt = new DataTable(); try { sqlcnn.Open(); SqlDataReader reader = sqlcmm.ExecuteReader(); while (reader.Read()) list.Add(new Person { username = reader.GetString(0), truename = reader.GetString(1), age = reader.GetInt32(2) }); //讀取資料 sqlcnn.Close(); } catch { } return Json(list, JsonRequestBehavior.AllowGet);
這樣比較囉嗦。
3、直接使用Newtonsoft.json對table進行序列化,得到json字串。
此時不能使用Json(str)的形式返回,這樣返回的話,客戶端不會識別為json。
可以直接返回Content(str)即可。
4、如果採用字串拼接的形式,同方法3.
在瀏覽器中測試時,返回如下內容,說明有問題,在客戶不會被自動解析成json。
測試時,返回如下結果,說明正常返回了json串。