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

  • 相关阅读:
    Python-OpenCV——进阶操作一网打尽
    深入理解jQuery插件开发
    Bootstrap整合ASP.NET MVC验证、jquery.validate.unobtrusive
    实用的Bootstrap的扩展和插件集合
    hadoop编程小技巧(5)---自定义输入文件格式类InputFormat
    mapreduce作业状态一直是ACCEPTED
    hadoop CLASSNAME命令使用注意点
    运行java的class文件方法详解
    Hadoop、Zookeeper、Hbase分布式安装教程
    java enum(枚举)使用详解 + 总结
  • 原文地址:https://www.cnblogs.com/cinray/p/1738564.html
Copyright © 2011-2022 走看看