Net 3.5 用DataContractJsonSerializer实现Json序列和反序列例子

近来在研究jQuery,用$.ajax在与后台交换数据时用到Json格式,后台与前台序列化和反序列化方法研究了很久才成功,发文共享.

前台调用的JS文件需要用到jQuery-1.2.6.jsjson2.js,后台引用空间System.Runtime.SerializationSystem.Runtime.Serialization.Json


Json序列化和反序列化方法

         ///   <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 ;
            }
        }
}

转载于:https://www.cnblogs.com/cchess/archive/2010/07/21/1782170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值