zoukankan      html  css  js  c++  java
  • 在ASP.net 3.5中 用JSON序列化对象(两种方法)(转自LeonSky)

    原帖地址:http://www.cnblogs.com/leonsky/articles/1510504.html

    原文如下:

    过去我们使用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,我加上不起作用。待测试

  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/cinray/p/1738564.html
Copyright © 2011-2022 走看看