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

  • 相关阅读:
    初认识AngularJS
    (imcomplete) UVa 10127 Ones
    UVa 10061 How many zero's and how many digits?
    UVa 11728 Alternate Task
    UVa 11490 Just Another Problem
    UVa 10673 Play with Floor and Ceil
    JSON对象和字符串的收发(JS客户端用typeof()进行判断非常重要)
    HTML.ActionLink 和 Url.Action 的区别
    EASYUI TREE得到当前节点数据的GETDATA方法
    jqueery easyui tree把已选中的节点数据拼成json或者数组(非常重要)
  • 原文地址:https://www.cnblogs.com/cinray/p/1738564.html
Copyright © 2011-2022 走看看