ASP.NET中JSON的序列化和反序列化
导读:JSON是专门为浏览器中的网页上运行的JavaScript的代码而设计的一种数据格式在网站应用中使用JSON的场景越来越多,本文介绍ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间,集合,字典的处理。
一,JSON简介
JSON(JavaScript对象符号,JavaScript的对象表示法)是一种轻量级的数据交换格式。
JSON是“名值对”的集合结构由大括号“{}”中括号“[]”,逗号“,”,冒号。“:”双引号'“,”'组成,包含的数据类型有对象,数字,布尔值,字符串数组,NULL等。
JSON具有以下的形式:
对象(对象)是一个无序的“名值对”集合,一个对象以“{”开始,“}”结束每个“名”后跟着一个“:”,多个“名值对”由逗号分隔如:
VAR用户= {“名”:“张三”,“性别”:“男”,“生日”:“1980年8月8日”}
数组(阵列)是值的有序集合,一个数组以“[”开始,以“]”结束,值之间使用“,”分隔如:
VAR用户列表= [{“用户”:{“名”:“张三”,“性别”:“男”,“生日”:“1980年8月8日”}},{“用户”:{“名” “李四”,“性别”:“男”,“生日”:“1985年5月8日”}}];
字符串(字符串)是由双引号包围的任意数量的的Unicode字符的集合,使用反斜线转义。
二,对JSON数据进行序列化和反序列化
可以使用DataContractJsonSerializer类将类型实例序列化为JSON字符串,并将JSON字符串反序列化为类型实例。DataContractJsonSerializer在System.Runtime.Serialization.Json命名空间下,.NET Framework 3.5的包含在System.ServiceModel.Web .dll文件中,需要添加对其的引用; .NET框架4在System.Runtime.Serialization中。
利用DataContractJsonSerializer序列化和反序列化的代码:
1:使用系统;
2:使用System.Collections.Generic;
3:使用System.Linq的;
4:使用的System.Web;
5:使用System.Runtime.Serialization.Json;
6:使用System.IO;
7:使用System.Text;
8:
9:/// <摘要>
10:/// JSON序列化和反序列化辅助类
11:/// 摘要>
12:公共类JsonHelper
13:{
14:/// <摘要>
15:/// JSON序列化
16:/// 摘要>
17:公共静态字符串JsonSerializer
18:{
19:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof运算(T));
20:MemoryStream的毫秒=新的MemoryStream();
21:ser.WriteObject(MS,T);
22:字符串jsonString = Encoding.UTF8.GetString(ms.ToArray());
23:ms.Close();
24:返回jsonString;
25:}
26:
27:/// <摘要>
28:/// JSON反序列化
29:/// 摘要>
30:公共静态牛逼JsonDeserialize
31:{
32:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof运算(T));
33:MemoryStream的毫秒=新的MemoryStream(Encoding.UTF8.GetBytes(jsonString));
34:T已OBJ =(T)ser.ReadObject(MS);
35:返回OBJ;
36:}
37:}
序列化演示:
简单对象的人:
1:公共类Person
2:{
3:公共字符串名称{; 组; }
4:公众诠释年龄{搞定; 组; }
5:}
序列化为JSON字符串:
1:保护无效的Page_Load(对象发件人,EventArgs的发送)
2:{
3:人p =新的Person();
4:p.Name =“张三”;
5:p.Age = 28;
6:
7:字符串jsonString = JsonHelper.JsonSerializer <人>(P);
8:回复于(jsonString);
9:}
输出结果:
{“时代”:28日,“名”:“张三”}
反序列化演示:
1:保护无效的Page_Load(对象发件人,EventArgs的发送)
2:{
3:字符串jsonString =“{\”年龄\“:28日,\”名称\“:\”张三\“}”;
4人P = JsonHelper.JsonDeserialize <人>(jsonString);
5:}
运行结果:
ASP.NET中的JSON序列化和反序列化还可以使用的JavaScriptSerializer,在System.Web.Script.Serializatioin命名空间下,需引用System.Web.Extensions.dll。也可以使用JSON.NET。
三,JSON序列化和反序列化日期时间的处理
JSON格式不直接支持日期和时间.DateTime值值显示为“/日期(700000 + 0500)/”形式的JSON字符串,其中第一个数字(在提供的示例中为700000)是GMT时区中自1970年1月1日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“0500”的部分可选,它指示该时间属于当地类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为UTC。
修改个人类,添加LastLoginTime:
1:公共类Person
2:{
3:公共字符串名称{; 组; }
4:公众诠释年龄{搞定; 组; }
5:公共的DateTime LastLoginTime {搞定; 组; }
6:}
1:人p =新的Person();
2:p.Name =“张三”;
3:p.Age = 28;
4:p.LastLoginTime = DateTime.Now;
5:
6:字符串jsonString = JsonHelper.JsonSerializer <人>(P);
序列化结果:
{“时代”:28日,“LastLoginTime”:“\ /日期(1294499956278 + 0800)\ /”,“姓名”:“张三”}
1.在后台使用正则表达式对其替换处理修改JsonHelper:
1:使用系统;
2:使用System.Collections.Generic;
3:使用System.Linq的;
4:使用的System.Web;
5:使用System.Runtime.Serialization.Json;
6:使用System.IO;
7:使用System.Text;
8:使用System.Text.RegularExpressions;
9:
10:/// <摘要>
11:/// JSON序列化和反序列化辅助类
12:/// 摘要>
13:公共类JsonHelper
14:{
15:/// <摘要>
16:/// JSON序列化
17:/// 摘要>
18:公共静态字符串JsonSerializer
19:{
20:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof运算(T));
21:MemoryStream的毫秒=新的MemoryStream();
22:ser.WriteObject(MS,T);
23:字符串jsonString = Encoding.UTF8.GetString(ms.ToArray());
24:ms.Close();
25://替换的Json的日期字符串
26:串P = @“ \\ /日期\((\ D +)\ + \ D + \)\\ / ”;
27:MatchEvaluator matchEvaluator =新MatchEvaluator(ConvertJsonDateToDateString);
28:正则表达式章=新的正则表达式(P);
29:jsonString = reg.Replace(jsonString,matchEvaluator);
30:返回jsonString;
31:}
32:
33:/// <摘要>
34:/// JSON反序列化
35:/// 摘要>
36:公共静态牛逼JsonDeserialize
37:{
38://将“YYYY-MM-DD HH:MM:SS”格式的字符串转为“\ /日期(1294499956278 + 0800)\ /”格式
39:串P = @“\ D {4} - \ d {2} - \ d {2} \ S \ D {2}:\ D {2}:\ D {2}”;
40:MatchEvaluator matchEvaluator =新MatchEvaluator(ConvertDateStringToJsonDate);
41:正则表达式章=新的正则表达式(P);
42:jsonString = reg.Replace(jsonString,matchEvaluator);
43:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof运算(T));
44:MemoryStream的毫秒=新的MemoryStream(Encoding.UTF8.GetBytes(jsonString));
45:T已OBJ =(T)ser.ReadObject(MS);
46:返回OBJ;
47:}
48:
49:/// <摘要>
50:///将Json的序列化的时间由/日期(1294499956278 + 0800)转为字符串
51:/// 摘要>
52:私人静态字符串ConvertJsonDateToDateString(赛米)
53:{
54:字符串结果=的String.Empty;
55:DateTime的DT =新日期时间(1970,1,1);
56:DT = dt.AddMilliseconds(long.Parse(m.Groups [1] .value的));
57:DT = dt.ToLocalTime();
58:结果= dt.ToString(“YYYY-MM-DD HH:MM:SS”);
59:返回结果;
60:}
61:
62:/// <摘要>
63:///将时间字符串转为Json的时间
64:/// 摘要>
65:私人静态字符串ConvertDateStringToJsonDate(赛米)
66:{
67:字符串结果=的String.Empty;
68:DateTime的DT = DateTime.Parse(m.Groups [0] .value的);
69:DT = dt.ToUniversalTime();
70:时间跨度TS = DT - DateTime.Parse(“1970-01-01”);
71:结果=的String.Format(“ \\ /日期({0} +0800)\\ /”,ts.TotalMilliseconds);
72:返回结果;
73:}
74:}
序列化演示:
1:人p =新的Person();
2:p.Name =“张三”;
3:p.Age = 28;
4:p.LastLoginTime = DateTime.Now;
5:
6:字符串jsonString = JsonHelper.JsonSerializer <人>(P);
运行结果:
{“时代”:28日,“LastLoginTime”:“2011-01-09一点○○分56秒”,“姓名”:“张三”}
反序列化演示:
JSON字符串=“{\”年龄\“:28日,\”LastLoginTime \“:\”2011-01-09 00:30:00 \“,\”名称\“:\”张三\“}”;
P = JsonHelper.JsonDeserialize <人>(JSON);
运行结果:
在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。
2.利用JavaScript的处理
1:功能ChangeDateFormat(jsondate){
2:jsondate = jsondate.replace(“/日期(”,“”).replace(“)/”,“”);
3:如果(jsondate.indexOf(“+”)> 0){
4:jsondate = jsondate.substring(0,jsondate.indexOf(“+”));
5:}
6:否则如果(jsondate.indexOf(“ - ”)> 0){
7:jsondate = jsondate.substring(0,jsondate.indexOf(“ - ”));
8:}
9:
10:VAR日期=新的日期(parseInt函数(jsondate,10));
11:无功一个月= date.getMonth()+ 1 <10?“0”+(date.getMonth()+ 1):date.getMonth()+ 1;
12:VAR的currentdate = date.getDate()<10?“0”+ date.getDate():date.getDate();
13:返回date.getFullYear()+“ - ”+月+“ - ”+的currentdate;
14:}
简单演示:
ChangeDateFormat(“\ /日期(1294499956278 + 0800)\ /”);
结果:
四,JSON序列化和反序列化集合,字典,数组的处理
在JSON数据中,所有的集合,字典和数组都表示为数组。
名单
1:名单<人>列表=新的List <人>()
2:{
3:新的Person(){名称=“张三”,年龄= 28},
4:新的Person(){名称=“李四”,年龄= 25}
5:};
6:
7:字符串jsonString = JsonHelper.JsonSerializer <名单<人>>(名单);
序列化结果:
“[{\”年龄\“:28日,\”名称\“:\”张三\“},{\”年龄\“:25,\”名称\“:\”李四\“}]”
字典不能直接用于JSON,字典字典转化为JSON并不是跟原来的字典格式一致,而是形式以词典的按键作为名称“密钥”的值,以字典的值作为名称为“值”的值。如:
1:词典<字符串,字符串> DIC =新词典<字符串,字符串>();
2:dic.Add(“姓名”,“张三”);
3:dic.Add(“时代”,“28”);
4:
5:字符串jsonString = JsonHelper.JsonSerializer <词典<字符串,字符串>>(DIC);
序列化结果:
1:“[{\”键\“:\”名称\“,\”价值\“:\”张三\“},{\”键\“:\”年龄\“,\”价值\“: \“28 \”}]“

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

如果你是一名.NET开发者,你必须意识到在交付高质量软件方面,优化功能和性能的重要性。通过熟练使用提供的资源并减少网站加载时间,你不仅为用户创造了愉快的体验,还能减少基础设施成本。

在高并发请求处理方面,.NETASP.NETCoreWebAPI性能优于JavaSpringMVC,原因包括:AOT提前编译,减少启动时间;更精细的内存管理,由开发人员负责分配和释放对象内存。

C#.NET面试问题和答案包括基础知识、核心概念和高级用法。1)基础知识:C#是微软开发的面向对象语言,主要用于.NET框架。2)核心概念:委托和事件允许动态绑定方法,LINQ提供强大查询功能。3)高级用法:异步编程提高响应性,表达式树用于动态代码构建。

C#高级开发者面试需要掌握异步编程、LINQ、.NET框架内部工作原理等核心知识。1.异步编程通过async和await简化操作,提升应用响应性。2.LINQ以SQL风格操作数据,需注意性能。3..NET框架的CLR管理内存,垃圾回收需谨慎使用。

C#是一种现代、面向对象的编程语言,由微软开发并作为.NET框架的一部分。1.C#支持面向对象编程(OOP),包括封装、继承和多态。2.C#中的异步编程通过async和await关键字实现,提高应用的响应性。3.使用LINQ可以简洁地处理数据集合。4.常见错误包括空引用异常和索引超出范围异常,调试技巧包括使用调试器和异常处理。5.性能优化包括使用StringBuilder和避免不必要的装箱和拆箱。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.
