cari
Rumahpembangunan bahagian belakangTutorial C#.NetASP.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 (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 \”}]“


Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
C# dan .net: memahami hubungan antara kedua -duaC# dan .net: memahami hubungan antara kedua -duaApr 17, 2025 am 12:07 AM

Hubungan antara C# dan .NET tidak dapat dipisahkan, tetapi mereka bukan perkara yang sama. C# adalah bahasa pengaturcaraan, sementara .NET adalah platform pembangunan. C# digunakan untuk menulis kod, menyusun bahasa pertengahan .NET (IL), dan dilaksanakan oleh Runtime .NET (CLR).

Relevan berterusan C# .NET: Lihat penggunaan semasaRelevan berterusan C# .NET: Lihat penggunaan semasaApr 16, 2025 am 12:07 AM

C#.NET masih penting kerana ia menyediakan alat dan perpustakaan yang kuat yang menyokong pelbagai pembangunan aplikasi. 1) C# menggabungkan rangka kerja NET untuk menjadikan pembangunan cekap dan mudah. 2) Mekanisme keselamatan dan sampah jenis C#meningkatkan kelebihannya. 3) .NET menyediakan persekitaran berjalan lintas platform dan API yang kaya, meningkatkan fleksibiliti pembangunan.

Dari web ke desktop: fleksibiliti C# .netDari web ke desktop: fleksibiliti C# .netApr 15, 2025 am 12:07 AM

C#.netisversatileforbothwebanddesktopdevelopment.1) Forweb, useasp.netfordynamicapplications.2) Fordesktop, ExployWindowsFormsor Wpfforrichinterfaces.3) UseXamarinforcross-platformdevelopment, enablingcodesharingacrosswindows, macOS, linux, andmobiledevices.

C# .NET dan Masa Depan: Mengadaptasi Teknologi BaruC# .NET dan Masa Depan: Mengadaptasi Teknologi BaruApr 14, 2025 am 12:06 AM

C# dan .NET menyesuaikan diri dengan keperluan teknologi baru melalui kemas kini dan pengoptimuman berterusan. 1) C# 9.0 dan .NET5 Memperkenalkan jenis rekod dan pengoptimuman prestasi. 2) .Netcore meningkatkan sokongan asli dan kontena awan. 3) ASP.Netcore mengintegrasikan dengan teknologi web moden. 4) ML.NET menyokong pembelajaran mesin dan kecerdasan buatan. 5) Pengaturcaraan Asynchronous dan Amalan Terbaik meningkatkan prestasi.

Adakah C# .net sesuai untuk anda? Menilai kebolehgunaannyaAdakah C# .net sesuai untuk anda? Menilai kebolehgunaannyaApr 13, 2025 am 12:03 AM

C#.netissusuitibleforenterprise-levelapplicationswithinthememicrosoftecosystemduetoitsstrongtyping, richlibraries, androbustperformance.

C# kod dalam .NET: Meneroka proses pengaturcaraanC# kod dalam .NET: Meneroka proses pengaturcaraanApr 12, 2025 am 12:02 AM

Proses pengaturcaraan C# dalam .NET termasuk langkah -langkah berikut: 1) Menulis C# Code, 2) Menyusun bahasa pertengahan (IL), dan 3) yang dilaksanakan oleh Runtime .NET (CLR). Kelebihan C# dalam .NET adalah sintaks moden, sistem jenis yang kuat dan integrasi yang ketat dengan Rangka Kerja .NET, sesuai untuk pelbagai senario pembangunan dari aplikasi desktop ke perkhidmatan web.

C# .NET: Meneroka Konsep Teras dan Asas PengaturcaraanC# .NET: Meneroka Konsep Teras dan Asas PengaturcaraanApr 10, 2025 am 09:32 AM

C# adalah bahasa pengaturcaraan yang berorientasikan objek moden yang dibangunkan oleh Microsoft dan sebagai sebahagian daripada Rangka Kerja .NET. 1.C# menyokong pengaturcaraan berorientasikan objek (OOP), termasuk enkapsulasi, warisan dan polimorfisme. 2. Pengaturcaraan Asynchronous dalam C# dilaksanakan melalui Async dan menunggu kata kunci untuk meningkatkan respons aplikasi. 3. Gunakan LINQ untuk memproses koleksi data dengan ringkas. 4. Kesilapan umum termasuk pengecualian rujukan null dan pengecualian indeks luar. Kemahiran penyahpepijatan termasuk menggunakan debugger dan pengendalian pengecualian. 5. Pengoptimuman Prestasi termasuk menggunakan StringBuilder dan mengelakkan pembungkusan yang tidak perlu dan unboxing.

Ujian C# .NET Aplikasi: Unit, Integrasi, dan Ujian Akhir ke AkhirUjian C# .NET Aplikasi: Unit, Integrasi, dan Ujian Akhir ke AkhirApr 09, 2025 am 12:04 AM

Strategi ujian untuk aplikasi C#. NET termasuk ujian unit, ujian integrasi, dan ujian akhir-ke-akhir. 1. Ujian unit memastikan bahawa unit minimum kod berfungsi secara bebas, menggunakan rangka kerja MSTest, Nunit atau Xunit. 2. Ujian Bersepadu Mengesahkan fungsi pelbagai unit yang digabungkan, data simulasi yang biasa digunakan dan perkhidmatan luaran. 3. Ujian akhir-ke-akhir mensimulasikan proses operasi lengkap pengguna, dan selenium biasanya digunakan untuk ujian automatik.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa