Posted in Javascript onDecember 19, 2013
/// <summary> /// Json序列化,用于发送到客户端 /// </summary> public static string ToJsJson(this object item) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType()); using (MemoryStream ms = new MemoryStream()) { serializer.WriteObject(ms, item); StringBuilder sb = new StringBuilder(); sb.Append(Encoding.UTF8.GetString(ms.ToArray())); return sb.ToString(); } } /// <summary> /// Json反序列化,用于接收客户端Json后生成对应的对象 /// </summary> public static T FromJsonTo<T>(this string jsonString) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T jsonObject = (T)ser.ReadObject(ms); ms.Close(); return jsonObject; }
实体类
[DataContract] public class TestObj { [DataMember] public string make { get; set; } [DataMember] public string model { get; set; } [DataMember] public int year { get; set; } [DataMember] public string color { get; set; } }
------------------javascript获取Json--------------------
javascript调用测试代码
$('#getJson').click(function() { $.ajax({ url: "getJsonHandler.ashx", type: 'GET', data: {}, dataType: 'json', timeout: 1000, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) }, success: function(result) { alert(result.make); alert(result.model); alert(result.year); alert(result.color); } }); });
C#后台生成代码
public class getJsonHandler: IHttpHandler { public void ProcessRequest(HttpContext context) { TestObj obj = new TestObj(); obj.make = "Make is Value"; obj.model = "Model is Value"; obj.year = 999; obj.color = "Color is Value"; context.Response.Write(obj.ToJsJson()); } public bool IsReusable { get { return false; } } } //返回值为 {"color":"Color is Value","make":"Make is Value","model":"Model is Value","year":999}
-----------------C#由Json生成对象-----------------------
javascript调用测试代码
$('#postJson').click(function() { var m_obj = { make: "Dodge", model: "Coronet R/T", year: 1968, color: "yellow" }; var jsonStr = JSON.stringify(m_obj); //用Json2.js生成Json字符串 $.ajax({ url: "postJsonHandler.ashx", type: 'POST', data: { postjson: jsonStr }, dataType: 'json', timeout: 1000, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus) }, success: function(result) { alert(result.success); } }); });
C#后台生成代码
public class postJsonHandler: IHttpHandler { public void ProcessRequest(HttpContext context) { string jsonStr = context.Request["postjson"]; TestObj obj = jsonStr.FromJsonTo<TestObj>(); if (string.IsNullOrEmpty(obj.make) || string.IsNullOrEmpty(obj.model) || string.IsNullOrEmpty(obj.color) || obj.year < 0) { context.Response.Write("{success:false}"); } else { context.Response.Write("{success:true}"); } public bool IsReusable { get { return false; } } }
使用Json时需要注意,服务器端拼凑生成Json字符串时,一定要注意把字符串用\"\"包裹,不然客户端接收时肯定会报错,根据Json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.
Json序列化和反序列化方法解析
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@