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

               

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

前台调用的JS文件需要用到jQuery-1.2.6.js和json2.js(http://www.json.org/json2.js),后台引用空间System.Runtime.Serialization和System.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 ;
            }
        }
}

 

使用Json时需要注意,服务器端拼凑生成Json字符串时,一定要注意把字符串用/"/"包裹,不然客户端接收时肯定会报错,根据Json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错.           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值