一、JSON解析与字符串化

  JSON.stringify()  序列化对象、数组或原始值

  语法:JSON.stringify(o,filter,indent)  

    o,要转换成JSON的对象、数组或原始值

    filter,指定要序列化的属性名

    indent,格式化为可读的代码,可指定分隔符或指定的缩进空格个数

  1. var man = { name: "张三", Age: 24, money: 123123 };
  2. var str1 = JSON.stringify(man); //基本序列化
  3. document.write(str1 + "<br/>"); //{"name":"张三","Age":24,"money":123123}
  4. var str2 = JSON.stringify(man, ["name", "Age"]); //指定要序列化的属性
  5. document.write(str2 + "<br/>"); //{"name":"张三","Age":24}
  6. var str3 = JSON.stringify(man,["name","Age","money"],"---"); //指定格式化数值
  7. document.write(str3); //{ ---"name": "张三", ---"Age": 24, ---"money": 123123 }

  JSON.parse()  反序列化一个字符串为JSON对象

  语法:JSON.parse(s)

     JSON.parse(s,reviver)  

     s,要解析的字符串。reviver,用来转换解析值的可选函数

  1. var man = { name: "张三", Age: 17, money: 123123 };
  2. var str1 = JSON.stringify(man, ["name", "Age"]); //指定要序列化的属性
  3. var str2 = JSON.parse(str1);
  4. document.write(str2.name + str2.Age + str2.money); //张三24undefined 由于money参数没有序列化,所以undefined

另外由于JSON.parse存在兼容性问题,IE6,IE7并不支持此函数(目前,搜狗,360浏览器也不支持)。所以上网找了两个兼容性比较好的字符串转JSON方法,代码如下:

  1. //第一种:eval方式解析
  2. function strToJson(str){
  3. var json = eval('(' + str + ')');
  4. return json;
  5. }
  6. //第二种:new Function形式
  7. function strToJson(str){
  8. var json = (new Function("return " + str))();
  9. return json;
  10. }

JSON是一种轻量级的数据交换格式,实质上就是一个javascript对象,因此格式与javascript定义的对象一样。在数据传输过程中,JSON是以字符串的格式传输的。

特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。

  到目前为止学会了如果将一个javascript对象转换为JSON,也知道了如何将JSON反转换为javascript对象。现在来结合后台程序,练下手。

  先来个jQuery获取后台返回的JSON数据并处理的例子,控制器代码:

  1. public ActionResult Index()
  2. {
  3. return View();
  4. }
  5.  
  6. public JsonResult GetJSON()
  7. {
  8. return Json(new {Id=1,Name="刘备",Age=23},"text/html",JsonRequestBehavior.AllowGet);
  9. }

  视图代码:

  1. <title>JSON示例</title>
  2. <script src="/jquery-1.8.2.min.js" type="text/javascript"></script>
  3. <script type="text/javascript">
  4. $(function () {
  5. $("#btn1").click(function () {
  6. $.ajax({
  7. url: "/Home/GetJSON",
  8. type: "post",
  9. dataType: "json",
  10. success: function (response) {
  11. $("#Id").text(response.Id);
  12. $("#Name").text(response.Name);
  13. $("#Age").text(response.Age);
  14. }
  15. })
  16. })
  17. })
  18. </script>
  19. </head>
  20. <body>
  21. <div id="imglist">
  22. <ul>
  23. <li id="Id"></li>
  24. <li id="Name"></li>
  25. <li id="Age"></li>
  26. </ul>
  27. <input type="button" id="btn1" value="确认" />
  28. </div>
  29. </body>
  30. </html>

  此示例实现的效果是,当点击按钮时,三个li的值自动设置为需要的内容。

细心的朋友应该注意到,在Result里面返回了一个JsonRequestBehavior.AllowGet。其实这是一个枚举,在MVC中的JSONResult里面用于控制HTTP Get请求的处理方式,先来了解下这个枚举。

  这是一个简单枚举,而且只有两个选项,以兄弟我一贯的方式,依然用个列表展示出来。

成员  成员值        说明

AllowGet         0  允许来自客户端的 HTTP GET 请求。

DenyGet          1        不允许来自客户端的HTTP GET请求。

默认值为 DenyGet。允许 GET 请求可能会导致用户在某一网站中仍处于已登录状态时访问另一个网站。这可能会生成导致信息泄漏的安全漏洞。(当然这是微软MSDN里面的话)

  其实在本例中,这个选项完全可以删开,完全没影响。因为本例的AJAX请求使用的是post方式,但是如果将AJAX的请求设置为get时,如果再不设置该属性为AllowGet时,那就真的获取不到数据了。

  另外.net还提供了很好用的C#对象转JSON的类,JavaScriptSerializer类,此类位于System.Web.Script.Serialization命名空间下。如要使用此命名空间,需要引用System.Web.Extensions库文件。要想了解此类的详细信息请查看。

  本处只给出一个简单示例。先来看控制器代码:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. return View();
  6. }
  7.  
  8. public ActionResult GetJSON()
  9. {
  10. Person p = new Person();
  11. p.Id = 1;
  12. p.Name = "关羽";
  13. p.Age = 22;
  14. JavaScriptSerializer jss = new JavaScriptSerializer();
  15. string JsonStr = jss.Serialize(p);
  16. return Content(JsonStr);
  17. }
  18.  
  19. }
  20.  
  21. public class Person
  22. {
  23. public int Id
  24. {
  25. get;
  26. set;
  27. }
  28.  
  29. public string Name
  30. {
  31. get;
  32. set;
  33. }
  34.  
  35. public int Age
  36. {
  37. get;
  38. set;
  39. }
  40. }

视图代码:

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head runat="server">
  3. <title>JSON示例</title>
  4. <script src="/jquery-1.8.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. $("#btn1").click(function () {
  8. $.ajax({
  9. url: "/Home/GetJSON",
  10. type: "post",
  11. dataType: "html",
  12. success: function (response) {
  13. var obj = JSON.parse(response);
  14. $("#Id").text(obj.Id);
  15. $("#Name").text(obj.Name);
  16. $("#Age").text(obj.Age);
  17. }
  18. })
  19. })
  20. })
  21. </script>
  22. </head>
  23. <body>
  24. <div id="imglist">
  25. <ul>
  26. <li id="Id"></li>
  27. <li id="Name"></li>
  28. <li id="Age"></li>
  29. </ul>
  30. <input type="button" id="btn1" value="确认" />
  31. </div>
  32. </body>
  33. </html>

  只代码能够将C#对象中的信息直接在javascript中处理并显示。只是无论是返回JsonResult还是Content都需要JSON.parse()一下,不像第一个示例那样不用转换,不知道是测试出了问题,还是本类就只是这样子。

2013-4-26  今天终于正式了一个长久以来不注重的问题,就是jQuery AJAX返回的dataType:"json"的问题,因为只要设置了dataType为json,就无法进入到seccess。上网查了一下,统一的说法是,jQuery的json变得比较严格,会调用本机的json.Parse来转换,如果存在什么双引号,单引号之类的不符合要求,则不会成功转换,并且不会进入到success。这样一来,.Net本身提供的序列化方法都不能用了。因此,建议还是使用dataType:text 然后再自己转换。

C#对象转Json

要引用System.Runtime.Serialization.dll

  第一个例子:C#后台将对象转换为Json格式,然后由前台解释:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. return View();
  6. }
  7.  
  8. public ActionResult GetJson()
  9. {
  10. Person p = new Person(1, "关羽", 20);
  11. string str = ObjToJson2<Person>(p);
  12. //return Json(p,JsonRequestBehavior.AllowGet); 这种方法也行,而且是.Net提供的,有这个的时候,用这个比较好,没有就自己搞的。
  13. return Content(str);
  14. }
  15.  
  16. //单个对象转Json 方法1
  17. public static string ObjToJson1<T>(T data)
  18. {
  19. JavaScriptSerializer jss = new JavaScriptSerializer();
  20. string JsonStr = jss.Serialize(data);
  21. return JsonStr;
  22. }
  23.  
  24. //单个对象转Json 方法2 //要特别注意,方法2要对类以及类的成员加上特性
  25. public static string ObjToJson2<T>(T obj)
  26. {
  27. try
  28. {
  29. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
  30. using (MemoryStream ms = new MemoryStream())
  31. {
  32. serializer.WriteObject(ms, obj);
  33. byte[] byteArr = ms.ToArray();
  34. return Encoding.UTF8.GetString(byteArr);
  35. }
  36. }
  37. catch(Exception ex)
  38. {
  39. return null;
  40. }
  41. }
  42. }
  43.  
  44. [DataContract] //该类中的特性是对于System.Runtime.Serialization.Json.DataContractJsonSerializer即方法2的转Json设置的,不设置不行。
  45. public class Person
  46. {
  47. public Person(int id, string name, int age)
  48. {
  49. Id = id;
  50. Name = name;
  51. Age = age;
  52. }
  53. [DataMember] //对方法2要设置成员属性
  54. public int Id
  55. {
  56. get;
  57. set;
  58. }
  59. [DataMember]
  60. public string Name
  61. {
  62. get;
  63. set;
  64. }
  65. [DataMember]
  66. public int Age
  67. {
  68. get;
  69. set;
  70. }
  71. }

  /Home/Index视图代码:

  1. <html>
  2. <head>
  3. <title>Json测试</title>
  4. <script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. $.ajax({
  8. url: "/Home/GetJson",
  9. dataType: "text",
  10. success: function (response) {
  11. alert(response);
  12. var obj = strToJson(response);
  13. $("#div1").html("姓名:" + obj.Name + " " + "年龄:" + obj.Age);
  14. alert(obj.Name);
  15. }
  16. })
  17. })
  18. function strToJson(str) {
  19. var json = eval('(' + str + ')');
  20. return json;
  21. }
  22. </script>
  23. </head>
  24. <body>
  25. <div id="div1">
  26.  
  27. </div>
  28. </body>
  29. </html>

  输出结果如下:

Json字符串转Model

这里实现的例子是,前台用js拼接一段Json字符串,传送上后台,后台再解释为C#对象,并将年龄+1后返回该对象的Json。

   后台代码:

  1. namespace MvcApplication1.Controllers
  2. {
  3. public class HomeController : Controller
  4. {
  5. public ActionResult Index()
  6. {
  7.  
  8. return View();
  9. }
  10.  
  11. public ActionResult JsonToModel(string json)
  12. {
  13. Person p = ParseFromJson<Person>(json);
  14. p.Age = p.Age + 1; //将年龄加大一岁,在序列化返回去
  15.  
  16. return Json(p,JsonRequestBehavior.AllowGet);
  17. }
  18.  
  19. /// <summary>
  20. /// 获取Json的Model
  21. /// </summary>
  22. /// <typeparam name="T"></typeparam>
  23. /// <param name="szJson"></param>
  24. /// <returns></returns>
  25. public static T ParseFromJson<T>(string szJson)
  26. {
  27. T obj = Activator.CreateInstance<T>(); //注意 要有T类型要有无参构造函数
  28. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
  29. {
  30. DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
  31. return (T)serializer.ReadObject(ms);
  32. }
  33. }
  34. }
  35.  
  36. [DataContract] //该类中的特性是对于System.Runtime.Serialization.Json.DataContractJsonSerializer即方法2的转Json设置的,不设置不行。
  37. public class Person
  38. {
  39. public Person()
  40. { }
  41. public Person(int id, string name, int age)
  42. {
  43. Id = id;
  44. Name = name;
  45. Age = age;
  46. }
  47. [DataMember] //对方法2要设置成员属性
  48. public int Id
  49. {
  50. get;
  51. set;
  52. }
  53. [DataMember]
  54. public string Name
  55. {
  56. get;
  57. set;
  58. }
  59. [DataMember]
  60. public int Age
  61. {
  62. get;
  63. set;
  64. }
  65. }
  66. }

  前台代码:

  1. <html>
  2. <head>
  3. <title>Json测试</title>
  4. <script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. var o = { Id: 1, Name: "刘备", Age: 23 };
  8. $.ajax({
  9. url: "/Home/JsonToModel",
  10. dataType: "text",
  11. type:"post",
  12. data:{
  13. json: JSON.stringify(o) //将o序列化为字符串
  14. },
  15. success: function (response) {
  16. alert(response);
  17. var obj = strToJson(response);
  18. $("#div1").html("姓名:" + obj.Name + " " + "年龄:" + obj.Age);
  19. alert(obj.Name);
  20. }
  21. })
  22. })
  23. function strToJson(str) {
  24. var json = eval('(' + str + ')');
  25. return json;
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div id="div1">
  31. </div>
  32. </body>
  33. </html>

  注意到我们前台拼接的年龄是23。但是返回的是24,说明已经拼接成功了。

  

DataTable转JSON

这里例子是在DataTable转换为JSON的方法,其中还包括了前台javascript解释:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5.  
  6. return View();
  7. }
  8.  
  9. public ActionResult GetJson()
  10. {
  11. DataTable dt = new DataTable();
  12. dt.Columns.Add("Id");
  13. dt.Columns.Add("Name");
  14. dt.Columns.Add("Age");
  15. dt.Rows.Add("1", "关羽", "22");
  16. dt.Rows.Add("2", "赵云", "23");
  17. dt.Rows.Add("3", "张飞", "21");
  18. //string strJson = DataTableToJson1(dt);
  19. string strJson = dt.ToJson();
  20. //return Json(dt, JsonRequestBehavior.AllowGet); //貌似这个是不支持的,不支持直接将DataTable转换为Json
  21. return Content(strJson);
  22. }
  23.  
  24. ///<summary>
  25. ///方法1 这个方法其实就是DataTable拼接成字符串而已,没什么出奇的
  26. ///</summary>
  27. ///<param name="dt"></param>
  28. ///<returns></returns>
  29. public static string DataTableToJson1(DataTable dt)
  30. {
  31. if (dt.Rows.Count == 0)
  32. {
  33. return "";
  34. }
  35.  
  36. StringBuilder jsonBuilder = new StringBuilder();
  37. jsonBuilder.Append("[");
  38. for (int i = 0; i < dt.Rows.Count; i++)
  39. {
  40. jsonBuilder.Append("{");
  41. for (int j = 0; j < dt.Columns.Count; j++)
  42. {
  43. jsonBuilder.Append("\"");
  44. jsonBuilder.Append(dt.Columns[j].ColumnName);
  45. jsonBuilder.Append("\":\"");
  46. jsonBuilder.Append(dt.Rows[i][j].ToString());
  47. jsonBuilder.Append("\",");
  48. }
  49. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
  50. jsonBuilder.Append("},");
  51. }
  52. jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
  53. jsonBuilder.Append("]");
  54. return jsonBuilder.ToString();
  55. }
  56.  
  57. }
  58.  
  59. /// <summary>
  60. /// 写成DataTable的扩展方法是这样
  61. /// </summary>
  62. public static class JsonTableHelper
  63. {
  64. /// <summary>
  65. /// 返回对象序列化
  66. /// </summary>
  67. /// <param name="obj">源对象</param>
  68. /// <returns>json数据</returns>
  69. public static string ToJson(object obj)
  70. {
  71. JavaScriptSerializer serialize = new JavaScriptSerializer();
  72. return serialize.Serialize(obj);
  73. }
  74.  
  75. /// <summary>
  76. /// 控制深度
  77. /// </summary>
  78. /// <param name="obj">源对象</param>
  79. /// <param name="recursionDepth">深度</param>
  80. /// <returns>json数据</returns>
  81. public static string ToJson(object obj, int recursionDepth)
  82. {
  83. JavaScriptSerializer serialize = new JavaScriptSerializer();
  84. serialize.RecursionLimit = recursionDepth;
  85. return serialize.Serialize(obj);
  86. }
  87.  
  88. /// <summary>
  89. /// DataTable转为json
  90. /// </summary>
  91. /// <param name="dt">DataTable</param>
  92. /// <returns>json数据</returns>
  93. public static string ToJson(this DataTable dt)
  94. {
  95. List<object> dic = new List<object>();
  96.  
  97. foreach (DataRow dr in dt.Rows)
  98. {
  99. Dictionary<string, object> result = new Dictionary<string, object>();
  100.  
  101. foreach (DataColumn dc in dt.Columns)
  102. {
  103. result.Add(dc.ColumnName, dr[dc].ToString());
  104. }
  105. dic.Add(result);
  106. }
  107. return ToJson(dic);
  108. }
  109. }

  其中/Home/Index的视图代码为:

  1. <html>
  2. <head>
  3. <title>Json测试</title>
  4. <script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. $.ajax({
  8. url: "/Home/GetJson",
  9. dataType: "text",
  10. success: function (response) {
  11. alert(response);
  12. var obj = strToJson(response);
  13. var str = "";
  14. for (var i = 0; i < obj.length; i++) {
  15. str += "姓名:" + obj[i].Name + " " + "年龄:" + obj[i].Age;
  16. }
  17. $("#div1").html(str);
  18. }
  19. })
  20. })
  21. function strToJson(str) {
  22. var json = eval('(' + str + ')');
  23. return json;
  24. }
  25. </script>
  26. </head>
  27. <body>
  28. <div id="div1">
  29. </div>
  30. </body>
  31. </html>

  输出结果如下:

  

List<T>转Json

List<T>转Json从方法上来说,与普通对象转Json代码是一样的,因此这也是为什么微软的JsonResult能够正确返回Json字符串的原因了。

  后台代码:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5.  
  6. return View();
  7. }
  8.  
  9. public ActionResult GetJson()
  10. {
  11. List<Person> list = new List<Person>();
  12. list.Add(new Person(1, "张飞", 21));
  13. list.Add(new Person(2, "关羽", 22));
  14. list.Add(new Person(3, "刘备", 23));
  15. //return Json(list,JsonRequestBehavior.AllowGet); //.Net还是很威武的,这行代码是可以运行并得到正确结果的,然后注释来看看前辈们的List<T>转Json的代码//
  16. string strJson = ObjToJson<List<Person>>(list); //泛泛型? 这代码怎么感觉怪怪的。
  17. return Content(strJson);
  18. }
  19.  
  20. [NonAction]
  21. public static string ObjToJson<T>(T data)
  22. {
  23. try
  24. {
  25. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(data.GetType());
  26. using (MemoryStream ms = new MemoryStream())
  27. {
  28. serializer.WriteObject(ms, data);
  29. return Encoding.UTF8.GetString(ms.ToArray());
  30. }
  31. }
  32. catch
  33. {
  34. return null;
  35. }
  36. }
  37. }
  38.  
  39. [DataContract] //该类中的特性是对于System.Runtime.Serialization.Json.DataContractJsonSerializer即方法2的转Json设置的,不设置不行。
  40. public class Person
  41. {
  42. public Person()
  43. { }
  44. public Person(int id, string name, int age)
  45. {
  46. Id = id;
  47. Name = name;
  48. Age = age;
  49. }
  50. [DataMember] //对方法2要设置成员属性
  51. public int Id
  52. {
  53. get;
  54. set;
  55. }
  56. [DataMember]
  57. public string Name
  58. {
  59. get;
  60. set;
  61. }
  62. [DataMember]
  63. public int Age
  64. {
  65. get;
  66. set;
  67. }
  68. }

  /Home/Index视图代码,这个与DataTable是一样的,反正都是转成数组的Json字符串。

  1. <html>
  2. <head>
  3. <title>Json测试</title>
  4. <script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. $.ajax({
  8. url: "/Home/GetJson",
  9. dataType: "text",
  10. success: function (response) {
  11. alert(response);
  12. var obj = strToJson(response);
  13. var str = "";
  14. for (var i = 0; i < obj.length; i++) {
  15. str += "姓名:" + obj[i].Name + " " + "年龄:" + obj[i].Age;
  16. }
  17. $("#div1").html(str);
  18. }
  19. })
  20. })
  21. function strToJson(str) {
  22. var json = eval('(' + str + ')');
  23. return json;
  24. }
  25. </script>
  26. </head>
  27. <body>
  28. <div id="div1">
  29. </div>
  30. </body>
  31. </html>

  

JSON转List<T>

本次的例子是先在本地拼接一个Json对象,然后发送到后台转成List<T>对象,再循环,年龄+10再返回Json

  后台代码:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. return View();
  6. }
  7.  
  8. public ActionResult GetJson(string json)
  9. {
  10. List<Person> list = JsonToObj(json, typeof(List<Person>)) as List<Person>; //貌似List<T> 与 普通类型是一样的 注意得到list的数量
  11.  
  12. //循环将年龄+10后再返回Json
  13. for (int i = 0; i < list.Count; i++)
  14. {
  15. list[i].Age = list[i].Age + 10;
  16. }
  17. return Json(list,JsonRequestBehavior.AllowGet); //.Net还是很威武的,这行代码是可以运行并得到正确结果的,然后注释来看看前辈们的List<T>转Json的代码
  18. }
  19.  
  20. public static Object JsonToObj(String json, Type t)
  21. {
  22. try
  23. {
  24. System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(t);
  25. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
  26. {
  27. return serializer.ReadObject(ms);
  28. }
  29. }
  30. catch
  31. {
  32. return null;
  33. }
  34. }
  35. }
  36.  
  37. [DataContract] //该类中的特性是对于System.Runtime.Serialization.Json.DataContractJsonSerializer即方法2的转Json设置的,不设置不行。
  38. public class Person
  39. {
  40. public Person()
  41. { }
  42. public Person(int id, string name, int age)
  43. {
  44. Id = id;
  45. Name = name;
  46. Age = age;
  47. }
  48. [DataMember] //对方法2要设置成员属性
  49. public int Id
  50. {
  51. get;
  52. set;
  53. }
  54. [DataMember]
  55. public string Name
  56. {
  57. get;
  58. set;
  59. }
  60. [DataMember]
  61. public int Age
  62. {
  63. get;
  64. set;
  65. }
  66. }

  前台Html代码:

  1. <html>
  2. <head>
  3. <title>Json测试</title>
  4. <script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(function () {
  7. var o1 = { Id: 1, Name: "张三", Age: 21 };
  8. var o2 = { Id: 2, Name: "李四", Age: 22 };
  9. var o3 = { Id: 3, Name: "王五", Age: 23 };
  10. var arr = [o1, o2, o3];
  11. var str = JSON.stringify(arr);
  12. $.ajax({
  13. url: "/Home/GetJson",
  14. dataType: "text",
  15. data: {
  16. json:str
  17. },
  18. type:"post",
  19. success: function (response) {
  20. alert(response);
  21. var obj = strToJson(response);
  22. var str = "";
  23. for (var i = 0; i < obj.length; i++) {
  24. str += "姓名:" + obj[i].Name + " " + "年龄:" + obj[i].Age;
  25. }
  26. $("#div1").html(str);
  27. }
  28. })
  29. })
  30. function strToJson(str) {
  31. var json = eval('(' + str + ')');
  32. return json;
  33. }
  34. </script>
  35. </head>
  36. <body>
  37. <div id="div1">
  38. </div>
  39. </body>
  40. </html>

  输出结果如图所示:

  

  留意到年龄已经全部加10了。

  下面再给出一个不错的方法:

  1.   JavaScriptSerializer sr = new JavaScriptSerializer();
  2.   JQGrilBind jqgb = sr.Deserialize(filters, typeof(JQGrilBind)) as JQGrilBind;  //filters为json字符串

MVC return Json()注意事项

  对于MVC中return Json()这个默认的辅助方法。

  1、如果传入的是对象,那么转Json出来的对象就是javascript对象。

  2、如果传入的是List<Model>、Array这种类型的数据,那么转Json出来的是javascript数组。

因此,要注意下,比如对于jQueryEasyUI的Tree来说,如果它接受的是javascript数组,那么就要返回对应的格式。

JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象的更多相关文章

  1. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List<T>转JSON,JSON转List<T>,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

  2. 使用Newtonsoft.json 解决 Asp.Net MVC DateTime类型数据Json格式化问题

    解决思路 众所周知,MVC中调用的微软的组件JavaScriptSerialer...,格式DateTime类型数据需要在客户端专门解. 还知道,NewtonSoft.json可以“正确”的格式化Da ...

  3. .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”

    当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...

  4. 在ASP.NET MVC中使用JQ插件datatable

    1. Models public class Citys { public int Id { get; set; } public string CityName { get; set; } publ ...

  5. Asp.net MVC 视图引擎

    Asp.net MVC视图引擎有两种: 1.ASPX View Engine 这个做过WebForm的人都清楚 设计目标:一个用于呈现Web Form页面的输出的视图引擎. 2.Razor View ...

  6. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  7. asp.net MVC 应用程序的生命周期

    下面这篇文章总结了 asp.net MVC 框架程序的生命周期.觉得写得不错,故转载一下. 转载自:http://www.cnblogs.com/yplong/p/5582576.html       ...

  8. Asp.Net MVC<四>:路由器

    路由的核心类型基本定义于System.Web.dll中,路由机制同样可应用与Web Forms,实现请求地址和物理文件的分离. web form中使用路由器的示例 路由配置 protected voi ...

  9. Ext.Net学习笔记24:在ASP.NET MVC中使用Ext.Net

    在前面的笔记中已经介绍了如何在ASP.NET WebForm中使用Ext.Net,由于这个系列一直在WebForm中使用,所以并没有涉及到ASP.NET MVC中的用法. 如果你要在ASP.NET M ...

随机推荐

  1. 315Mhz、433Mhz无线遥控信号的解码分析和模拟

    摘要 前段时间学习无线电的同时了解到arduino是作为技能尚未成熟技术宅的我继树莓派又一个不错的选择.于是花了200元购得3块arduino开发板(2*nano&1*uno)和其他传感器等, ...

  2. 浏览器兼容 copyToClipboard("拷贝内容")

    function copyToClipboard(txt) { if (window.clipboardData) { window.clipboardData.clearData(); clipbo ...

  3. gulp ---攻略一

    根据项目需要可能会出连载 项目需要现在用gulp进行js的质量检测.合并.压缩.发布,未来需要进行sass的编译.合并.压缩,html.img的压缩以及md5戳.reload等功能,暂时先测试js的质 ...

  4. 一种工业级系统交互建模工具的应用--EventStudio System Designer

    一种工业级系统交互建模工具的应用 [摘要] 本文以探索如何维护大规模复杂系统交互设计模型为目的,以EventHelix公司的商业付费软件EventStudio System Designer为建模工具 ...

  5. systemtap折腾笔记

    在这货上花费了不少时间,都是受了@agentzh 大神的蛊惑:) 他写的nginx-systemtap-toolkit监测的数据很有价值,对于系统优化实在是利器. 最早折腾systemtap,是在Ub ...

  6. 十分钟了解分布式计算:GraphLab

    GraphLab是一个面向大规模机器学习/图计算的分布式内存计算框架,由CMU在2009年开始的一个C++项目,这里的内容是基于论文 Low, Yucheng, et al. "Distri ...

  7. Linux下部署solrCloud

    1. 准备工作 这里我只是把我的师兄教我的关于Solrcloud搭建的过程,以及需要注意的地方文档化了.感谢他教会了我很多. 1.机子IP 三台安装linux系统的机子的IP地址为: 172.24.1 ...

  8. Node.js高级编程读书笔记Outline

    Motivation 世俗一把,看看前端的JavaScript究竟能做什么. 顺便检验一下自己的学习能力. Audience 想看偏后台的Java程序员关于前端JavaScript的认识的职业前端工程 ...

  9. iframe的使用

    function Report() {           var info = document.getElementById("iframeReport");          ...

  10. windows Apache+cgi的配置方法

    1.  配置config line 119 :打开#LoadModule rewrite_module modules/mod_rewrite.so line 192 :<Directory / ...