博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转载:在ASP.net 3.5中 用JSON序列化对象(两种方法)
阅读量:5142 次
发布时间:2019-06-13

本文共 2661 字,大约阅读时间需要 8 分钟。

    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 { get; set; }
    public string title { get; set; }
    public string defaulturl { get; set; }
}
            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序列化忽略它从而不输出。不被序列化。

 

转载于:https://www.cnblogs.com/zhanglixina/p/7776718.html

你可能感兴趣的文章
转 Silverlight开发历程—(画刷与着色之线性渐变画刷)
查看>>
SQL语法(3)
查看>>
在js在添版本号
查看>>
sublime3
查看>>
Exception Type: IntegrityError 数据完整性错误
查看>>
Nuget:Newtonsoft.Json
查看>>
【luogu4185】 [USACO18JAN]MooTube [并查集]
查看>>
手机号脱敏处理
查看>>
CI控制器调用内部方法并载入相应模板的做法
查看>>
Hdu - 1002 - A + B Problem II
查看>>
HDU - 2609 - How many
查看>>
每天CookBook之Python-003
查看>>
每天CookBook之Python-004
查看>>
Android设置Gmail邮箱
查看>>
StringBuffer的用法
查看>>
js编写时间选择框
查看>>
PHP压缩文件操作
查看>>
Java数据结构和算法(四)--链表
查看>>
JIRA
查看>>
小技巧——直接在目录中输入cmd然后就打开cmd命令窗口
查看>>