在Asp.net 3.5中用JSON序列化对象的两种方法 (转载)

 asp.net3.5中已经集成了序列化对象为json的方法。

    1:System.Runtime.Serialization.Json;
    2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。

    第一种方法:System.Runtime.Serialization.Json 

public   class  JsonHelper
    {
        
///   <summary>
        
///  生成Json格式
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="obj"></param>
        
///   <returns></returns>
        
public   static   string  GetJson < T > (T obj)
        {
            DataContractJsonSerializer json 
=   new  DataContractJsonSerializer(obj.GetType());
            
using  (MemoryStream stream  =   new  MemoryStream())
            {
                json.WriteObject(stream, obj);
                
string  szJson  =  Encoding.UTF8.GetString(stream.ToArray());  return  szJson;
            }
        }
        
///   <summary>
        
///  获取Json的Model
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="szJson"></param>
        
///   <returns></returns>
         public   static  T ParseFromJson < T > ( string  szJson)
        {
            T obj 
=  Activator.CreateInstance < T > ();
            
using  (MemoryStream ms  =   new  MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer serializer 
=   new  DataContractJsonSerializer(obj.GetType());
                
return  (T)serializer.ReadObject(ms);
            }
        }
    }
public   class  topMenu
{
    
public   string  id {  get set ; }
    
public   string  title {  get set ; }
    
public   string  defaulturl {  get set ; }
}
            topMenu t_menu 
=   new  topMenu()
            {
                id 
=   " 1 " ,
                title 
=   " 全局 " ,
                defaulturl 
=   " 123456 "
            };
            List
< topMenu >  l_topmenu  =   new  List < topMenu > ();
            
for  ( int  i  =   0 ; i  <   3 ; i ++ )
            {
                l_topmenu.Add(t_menu);
            }
            Response.Write(JsonHelper.GetJson
< List < topMenu >> (l_topmenu));


     输出结果为:
       [{"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}]
 
    下面利用上面ParseFromJson方法读取Json
     输出结果为:全局

 

  string  szJson  =   @" {""id"":""1"",""title"":""全局"",""defaulturl"":""123456""}  " ;
      topMenu t_menu2 
=  JsonHelper.ParseFromJson < topMenu > (szJson);
      Response.Write(t_menu2.title);


      第二种方法:System.Web.Script.Serialization(引用System.Web.Extensions.dll)还是用到上面方法中JSON属性的类,序列化方式不一样。         

            topMenu t_menu  =   new  topMenu()
            {
                id 
=   " 1 " ,
                title 
=   " 全局 " ,
                defaulturl 
=   " 123456 "
            };

            List
< topMenu >  l_topmenu  =   new  List < topMenu > (); 

            
for  ( int  i  =   0 ; i  <   3 ; i ++ )
            {
                l_topmenu.Add(t_menu);
            }

     
      下面用这种方式输出:

 

      JavaScriptSerializer jss  =   new  JavaScriptSerializer(); 
      Response.Write( jss.Serialize(l_topmenu )); 

      
      输出结果是相同的

      [{"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}]

      JavaScriptSerializer中的Deserialize方法读取Json

       string  szJson  =   @" {""id"":""1"",""title"":""全局"",""defaulturl"":""123456""}  " ;
      topMenu toptabmenu 
=  jss.Deserialize < topMenu > (szJson); 
      Response.Write( jss.Serialize(toptabmenu.title)); 

     
      输出结果为:全局 

      综上:两种方法个有好处。一个比较灵活。[ScriptIgnore] ,可以让JSON序列化忽略它从而不输出。不被序列化。

  在客户端序列化一个对象 使用 json-serialization.js  中的JSON.stringify; 例如: var jsonstr=JSON.stringify(jsobj);

  反序列化:使用 内置函数 eval() ; 例如:  var jsobj=eval("("+jsonstr+")");     

 

转载于:https://www.cnblogs.com/xiaoqiangR/archive/2010/09/14/1825716.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值