随笔 - 289  文章 - 1  评论 - 2716  阅读 - 195万

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

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

 

posted on   min.jiang  阅读(3442)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2008-08-17 老生常谈:建造者模式(设计模式到底离我们有多远)
< 2009年8月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示