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

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Que vous soyez débutant ou professionnel expérimenté, la maîtrise du C# ouvrira la voie à votre carrière.

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Si vous êtes un développeur .NET, vous devez être conscient de l'importance d'optimiser les fonctionnalités et les performances pour fournir des logiciels de haute qualité. En utilisant de manière experte les ressources fournies et en réduisant les temps de chargement des sites Web, vous créez non seulement une expérience agréable pour vos utilisateurs, mais vous réduisez également les coûts d'infrastructure.

En termes de traitement des requêtes à haute concurrence, .NETASP.NETCoreWebAPI fonctionne mieux que JavaSpringMVC. Les raisons incluent : la compilation précoce AOT, qui réduit le temps de démarrage, une gestion plus raffinée de la mémoire, où les développeurs sont responsables de l'allocation et de la libération de la mémoire des objets.

C # .NET Les questions et réponses d'entrevue comprennent les connaissances de base, les concepts de base et l'utilisation avancée. 1) Connaissances de base: C # est un langage orienté objet développé par Microsoft et est principalement utilisé dans le framework .NET. 2) Concepts de base: la délégation et les événements permettent des méthodes de liaison dynamiques, et LINQ fournit des fonctions de requête puissantes. 3) Utilisation avancée: la programmation asynchrone améliore la réactivité et les arbres d'expression sont utilisés pour la construction de code dynamique.

L'entrevue avec C # Developer Senior Developer nécessite de maîtriser les connaissances de base telles que la programmation asynchrone, la LINQ et les principes de travail internes des frameworks .NET. 1. La programmation asynchrone simplifie les opérations par asynchronisation et attend pour améliorer la réactivité de l'application. 2.Linq exploite des données dans le style SQL et fait attention aux performances. 3. La CLR du cadre net gère la mémoire et la collecte des ordures doit être utilisée avec prudence.

C # est un langage de programmation moderne et orienté objet développé par Microsoft et dans le cadre du .NET Framework. 1.C # prend en charge la programmation orientée objet (POO), y compris l'encapsulation, l'héritage et le polymorphisme. 2. La programmation asynchrone en C # est implémentée via Async et attend des mots clés pour améliorer la réactivité des applications. 3. Utilisez LINQ pour traiter les collections de données concisement. 4. Les erreurs courantes incluent les exceptions de référence NULL et les exceptions indexes hors gamme. Les compétences de débogage comprennent l'utilisation d'un débogueur et une gestion des exceptions. 5. L'optimisation des performances comprend l'utilisation de StringBuilder et d'éviter l'emballage et le déballage inutiles.

C # .NETtisversatileforbothwebandDeskTopDevelopment.1) forweb, useasp.netfordynamicapplications.2) fordesktop, employwindowsformSorwpfforrichInterfaces.3) usexamarinforcross-plateformDevelopment, permanant les codéescosswindows, macos, linux, etmobiledevices.
