Json是什么,Json就是javascript对象或者数组格式的字符串,Http协议不能传递JavaScript对象,所以要转换为字符串进行传输。
AJAX传递复杂数据如果自己进行格式定义的话会经历组装、解析的过程,因此AJAX中有一个事实上的数据传输标准JSon。Json(是一个标准,就像XML一样,Json规定了对象以什么样的格式保存为一个字符串)将复杂对象序列化为一个字符串,在浏览器端再将字符串反序列化为JavaScript可以读取的对象。Json被几乎所有语言支持。Json就是一个把对象(js、java、.net)表示为字符串的标准。
JavaScript对象(键值对) var person= {name:'rupeng',age:8};
JavaScript数组:var names = ['rupeng','qq','taobao'];
JavaScript对象数组:var persons = [{name:'rupeng',age:8}, {name:'qq',age:15}, {name:'taobao',age:10}];
JavaScript对象关联:var p = {name:'yzk',child:{name:'timi',age:1}};
如何把json字符串转换为js对象:var obj = eval("a("+data+")")。举例:普通对象、数组、对象数组、多对象关联。
(*)安全性问题,如果不用jquery,新版浏览器都原生支持JSON.parse,不支持的引用json2.js也就可以了
C#中将.Net对象序列化为Json字符串的方法:JavaScriptSerializer().Serialize(p)。.Net对象→json字符串→JavaScript对象。
JavaScriptSerializer在System.Web.Extensions.dll中。Json.Net
C#中的匿名类: var p = new { Id=5,Name="rupeng"} 通过反编译看到其实还是生成一个类。
ashx代码:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; //序列化字符串数组 string[] strs = { "www.rupeng.com", "www.baidu.com", "www.qq.com" }; JavaScriptSerializer jss = new JavaScriptSerializer(); string json = jss.Serialize(strs); context.Response.Write(json); //序列化匿名类 var p = new { ID = 0, Name = "syfpc", Height = 180 }; JavaScriptSerializer jss = new JavaScriptSerializer(); string json = jss.Serialize(p); context.Response.Write(json); //序列化List集合 List<string> list = new List<string>(); list.Add("aaa"); list.Add("bbb"); list.Add("ccc"); JavaScriptSerializer jss = new JavaScriptSerializer(); string json = jss.Serialize(list); context.Response.Write(json); }
javascript代码:
<script type="text/javascript"> $(function () { MyAjax("JsonTest.ashx", function (resTxt) { var strs = eval("(" + resTxt + ")"); //alert(strs.Name);//获取类的value值 for (var i = 0; i < strs.length; i++) { alert(strs[i]); } }, function (status) { } ) }); </script>