zoukankan      html  css  js  c++  java
  • 在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 { getset; }
        
    public string title { getset; }
        
    public string defaulturl { getset; }
    }
                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+")");     

  • 相关阅读:
    Java流程
    Java对于byte/short/char三种类型的注意事项
    JShell
    Java方法
    ubuntu14.04开启crontab日志
    ubuntu14.04开启crontab日志
    hive数据文件简单合并
    hive数据文件简单合并
    Sqoop增量从MySQL中向hive导入数据
    Sqoop增量从MySQL中向hive导入数据
  • 原文地址:https://www.cnblogs.com/xiaoqiangR/p/1825716.html
Copyright © 2011-2022 走看看