Net 3.5 用DataContractJsonSerializer实现Json序列和反序列例子
近来在研究jQuery,用$.ajax在与后台交换数据时用到Json格式,后台与前台序列化和反序列化方法研究了很久才成功,发文共享. 前台调用的JS文件需要用到jQuery-1.2.6.js和json2.js,后台引用空间System.Runtime.Serialization和System.Runtime.Serialization.Json Json序列化和反序列化方法
///
<summary>
/// Json序列化,用于发送到客户端 /// </summary> public static string ToJsJson( this object item) { DataContractJsonSerializerserializer = new DataContractJsonSerializer(item.GetType()); using (MemoryStreamms = new MemoryStream()) { serializer.WriteObject(ms,item); StringBuildersb = new StringBuilder(); sb.Append(Encoding.UTF8.GetString(ms.ToArray())); return sb.ToString(); } } /// <summary> /// Json反序列化,用于接收客户端Json后生成对应的对象 /// </summary> public static TFromJsonTo < T > ( this string jsonString) { DataContractJsonSerializerser = new DataContractJsonSerializer( typeof (T)); MemoryStreamms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); TjsonObject = (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(HttpContextcontext) { TestObjobj = new TestObj(); obj.make = " MakeisValue " ; obj.model = " ModelisValue " ; obj.year = 999 ; obj.color = " ColorisValue " ; context.Response.Write(obj.ToJsJson()); } public bool IsReusable { get { return false ; } } } // 返回值为{"color":"ColorisValue","make":"MakeisValue","model":"ModelisValue","year":999}
---------------------------------C#由Json生成对象--------------------------------------- javascript调用测试代码
$(
'
#postJson
'
).click(
function
(){
var m_obj = {make: " Dodge " ,model: " CoronetR/T " ,year: 1968 ,color: " yellow " }; var jsonStr = JSON.stringify(m_obj); // 用Json2.js生成Json字符串 $.ajax({ url: " postJsonHandler.ashx " , type: ' POST ' , data:{postjson:jsonStr}, success: function (result){ alert(result.success); } }); }); C#后台生成代码
public
class
postJsonHandler:IHttpHandler
{ public void ProcessRequest(HttpContextcontext) { string jsonStr = context.Request[ " postjson " ]; TestObjobj = 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字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |