惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
量子位
aimingoo的专栏
aimingoo的专栏
V
V2EX
Vercel News
Vercel News
B
Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
TaoSecurity Blog
TaoSecurity Blog
N
News and Events Feed by Topic
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
S
Secure Thoughts
U
Unit 42
博客园 - 叶小钗
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
W
WeLiveSecurity
博客园 - Franky
Forbes - Security
Forbes - Security
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Schneier on Security
Schneier on Security
I
InfoQ
B
Blog RSS Feed
大猫的无限游戏
大猫的无限游戏
A
About on SuperTechFans
Webroot Blog
Webroot Blog
AWS News Blog
AWS News Blog
Last Week in AI
Last Week in AI
Security Archives - TechRepublic
Security Archives - TechRepublic
C
CERT Recently Published Vulnerability Notes
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
L
Lohrmann on Cybersecurity
SecWiki News
SecWiki News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
J
Java Code Geeks

博客园 - IT爱好者

C# 自定义打印 C# 打印,不显示打印进度对话框 如何解决迅雷插件导致IE10崩溃的问题 ASP.NET MVC 使用Jquery Uploadify 在非IE浏览器下Http Error的解决方案 c#操作access,update语句不执行的解决办法 解决:System.Data.SqlClient.SqlError: FILESTREAM 功能被禁用 服务器“**”上的MSDTC不可用的解决办法 通过Package Manager Console 向VS2010安装 EFCodeFirst 删除SVN遗留的无用文件 解决"System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本" 修改IIS默认的localhost名称 IIS服务器应用程序不可用的解决办法 使用XML与远程服务器进行交互 小米手机指令大全 Java与.NET DES加密解密互转 获取执行SQL语句的返回结果 ASP.NET中如何向页面写入JavaScript脚本内容 Oracle自增列创建方法 android Listview 拖动时背景为黑色问题
ASP.net中用JSON序列化对象
IT爱好者 · 2011-07-08 · via 博客园 - IT爱好者

过去我们使用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 代码如下:

View Code

 1     public class JsonHelper
 2     {
 3         /// <summary>
 4         /// 生成Json格式
 5         /// </summary>
 6         /// <typeparam name="T"></typeparam>
 7         /// <param name="obj"></param>
 8         /// <returns></returns>
 9         public static string GetJson<T>(T obj)
10         {
11             DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
12             using (MemoryStream stream = new MemoryStream())
13             {
14                 json.WriteObject(stream, obj);
15                 string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
16             }
17         }
18         /// <summary>
19         /// 获取Json的Model
20         /// </summary>
21         /// <typeparam name="T"></typeparam>
22         /// <param name="szJson"></param>
23         /// <returns></returns>
24         public static T ParseFromJson<T>(string szJson)
25         {
26             T obj = Activator.CreateInstance<T>();
27             using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
28             {
29                 DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
30                 return (T)serializer.ReadObject(ms);
31             }
32         }
33     }

下面为具体用法

声明一个需要输出JSON属性的类

View Code

1 public class topMenu
2 {
3     public string id { getset; }
4     public string title { getset; }
5     public string defaulturl { getset; }
6 }

本例使它循环三次 利用上面GetJson方法序列化

View Code

 1             topMenu t_menu = new topMenu()
 2             {
 3                 id = "1",
 4                 title = "全局",
 5                 defaulturl = "123456"
 6             };
 7 
 8             List<topMenu> l_topmenu = new List<topMenu>();
 9             for (int i = 0; i < 3; i++)
10             {
11                 l_topmenu.Add(t_menu);
12             }
13             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

View Code

1       string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
2       topMenu t_menu2 = JsonHelper.ParseFromJson<topMenu>(szJson);
3       Response.Write(t_menu2.title);


输出结果为:全局

第二种方法

System.Web.Script.Serialization (引用System.Web.Extensions.dll)

还是用到上面方法中JSON属性的类

下面和上面方法中一样。循环三次就。序列化方式不一样

View Code

 1            topMenu t_menu = new topMenu()
 2             {
 3                 id = "1",
 4                 title = "全局",
 5                 defaulturl = "123456"
 6             };
 7 
 8             List<topMenu> l_topmenu = new List<topMenu>(); 
 9 
10             for (int i = 0; i < 3; i++)
11             {
12                 l_topmenu.Add(t_menu);
13             }

下面用这种方式输出:

View Code

1       JavaScriptSerializer jss = new JavaScriptSerializer(); 
2       Response.Write( jss.Serialize(l_topmenu )); 


输出结果是相同的

[{"defaulturl":"123456","id":"1","title":"全局"},

{"defaulturl":"123456","id":"1","title":"全局"},

{"defaulturl":"123456","id":"1","title":"全局"}]

下面利用JavaScriptSerializer中的Deserialize方法读取Json

View Code

1      string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
2       topMenu toptabmenu = jss.Deserialize<topMenu>(szJson); 
3       Response.Write( jss.Serialize(toptabmenu.title)); 

输出结果为:全局

 综上。两种方法个有好处。一个比较灵活。一个较简洁