首页 后端开发 C#.Net教程 ASP.NET中JSON的序列化和反序列化

ASP.NET中JSON的序列化和反序列化

Dec 20, 2016 am 09:12 AM
.net

导读: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 (T T)

  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 (串jsonString)

  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 (T T)

  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 (串jsonString)

  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 \”}]“


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C#的就业前景如何 C#的就业前景如何 Oct 19, 2023 am 11:02 AM

无论您是初学者还是有经验的专业人士,掌握C#将为您的职业发展铺平道路。

分享几个.NET开源的AI和LLM相关项目框架 分享几个.NET开源的AI和LLM相关项目框架 May 06, 2024 pm 04:43 PM

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

面向开发人员的.NET性能优化技术 面向开发人员的.NET性能优化技术 Sep 12, 2023 am 10:43 AM

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

Java框架和.NET框架的性能差异 Java框架和.NET框架的性能差异 Jun 03, 2024 am 09:19 AM

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

C#.NET面试问题和答案:提高您的专业知识 C#.NET面试问题和答案:提高您的专业知识 Apr 07, 2025 am 12:01 AM

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

高级C#.NET教程:ACE您的下一次高级开发人员面试 高级C#.NET教程:ACE您的下一次高级开发人员面试 Apr 08, 2025 am 12:06 AM

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

C#.NET:探索核心概念和编程基础知识 C#.NET:探索核心概念和编程基础知识 Apr 10, 2025 am 09:32 AM

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

从网络到桌面:C#.NET的多功能性 从网络到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

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

See all articles