在ASP.net 3.5中 用JSON序列化对象(两种方法)

过去我们使用JSON.net序列化一个对象,在asp.net3.5中已经集成了序列化对象为json的方法。


我们分别针对System.Runtime.Serialization.Json和System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。

 

第一种方法:

System.Runtime.Serialization.Json

(在vs2008添加引用System.Runtime.Serialization 如果在非WEB项目下还需要引用System.ServiceModel.Web)

   
   
JosnHelper.CS 代码如下:

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

 
 
下面为具体用法
声明一个需要输出JSON属性的类

public class topMenu {     public string id { get; set; }

    public string title { get; set; }

    public string defaulturl { get; set; } }

本例使它循环三次 利用上面GetJson方法序列化

            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] 不灵。大空有空测试一下。

[ScriptIgnore] 我在网上查了相关资料说把它加在属性上面。可以让JSON序列化忽略它从而不输出。不被序列化

我把[ScriptIgnore]加在JOSN属性类里,让它不被序列化到JSON,我加上不起作用。待测试

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值