前言
序列化是指將對(duì)象轉(zhuǎn)換成字節(jié)流,從而存儲(chǔ)對(duì)象或?qū)?duì)象傳輸?shù)絻?nèi)存、數(shù)據(jù)庫(kù)或文件的過(guò)程。序列化常用的格式有三種,其中JSON序列化,由于 JSON 是一種開放標(biāo)準(zhǔn),因此使用是較為廣泛的。本文將介紹在.NET 應(yīng)用開發(fā)中使用的兩個(gè) JSON 序列化器。
序列化器
1、Newtonsoft Json
這是一款高性能的Json序列化和解析工具,開源且免費(fèi)。它提供了用于實(shí)現(xiàn)框架的核心服務(wù)的類。它提供了用于在 .NET 類型和 JSON 類型之間進(jìn)行轉(zhuǎn)換的方法。
優(yōu)點(diǎn)和特點(diǎn)
簡(jiǎn)單示例
通過(guò)使用JsonConvert類的 SerializeObject 和 DeserializeObject 方法實(shí)現(xiàn)序列化與反序列化。(必須引入Newtonsoft.Json)
定義實(shí)現(xiàn)對(duì)象
using System;
namespace Fountain.WinConsole.SerializerDemo
{
/// <summary>
/// 地址
/// </summary>
public class Address
{
/// <summary>
/// 市
/// </summary>
public string City { get; set; }
/// <summary>
/// 詳細(xì)地址
/// </summary>
public string Detail { get; set; }
/// <summary>
/// 區(qū)
/// </summary>
public string District { get; set; }
/// <summary>
/// 省
/// </summary>
public string Province { get; set; }
/// <summary>
/// 鎮(zhèn)
/// </summary>
public string Town { get; set; }
}
}
序列化與反序列化
using Newtonsoft.Json;
using System;
using System.IO;
namespace Fountain.WinConsole.SerializerDemo
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建實(shí)體對(duì)象
Recipient recipient = new Recipient()
{
Name = "張三",
Mobile = "1311111111",
Phone = "0752-00000000",
Address = new Address()
{
City = "廣州市",
Province = "廣東省",
Detail = "張三的101房",
District= "海珠區(qū)"
}
};
// 序列化操作
string output = JsonConvert.SerializeObject(recipient);
Console.WriteLine("序列化后:");
Console.WriteLine(output);
Console.WriteLine();
// 反序列化操作
Recipient deserializedRecipient = JsonConvert.DeserializeObject<Recipient>(output);
Console.WriteLine("反序列化后:");
Console.WriteLine(deserializedRecipient.Name);
Console.WriteLine(deserializedRecipient.Phone);
Console.WriteLine(deserializedRecipient.Address.City);
// 等待輸入退出
Console.ReadKey();
}
}
}
2、System.Text.Json
Microsoft 在 .NET Core 3.0 中發(fā)布了一個(gè)名為 System.Text.Json 的新命名空間,用于處理JSON數(shù)據(jù)的序列化和反序列化。(專注于高性能)
優(yōu)點(diǎn)和特點(diǎn)
簡(jiǎn)單示例
通過(guò)使用JsonSerializer類的 Serialize 和 Deserialize 方法實(shí)現(xiàn)序列化與反序列化。using System;
using System.Text.Encodings.Web;
using System.Text.Json;
namespace Fountain.WinConsole.SerializerDemo
{
internal class Program
{
static void Main(string[] args)
{
// 創(chuàng)建實(shí)體對(duì)象
Recipient recipient = new Recipient()
{
Name = "張三",
Mobile = "1311111111",
Phone = "0752-00000000",
Address = new Address()
{
City = "廣州市",
Province = "廣東省",
Detail = "張三的101房",
District= "海珠區(qū)"
}
};
// 解決中文問(wèn)題
JsonSerializerOptions options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
WriteIndented = true
};
// 序列化操作
string output = JsonSerializer.Serialize(recipient,options);
Console.WriteLine("序列化后:");
Console.WriteLine(output);
Console.WriteLine();
// 反序列化操作
Recipient deserializedRecipient = JsonSerializer.Deserialize<Recipient>(output);
Console.WriteLine("反序列化后:");
Console.WriteLine(deserializedRecipient.Name);
Console.WriteLine(deserializedRecipient.Phone);
Console.WriteLine(deserializedRecipient.Address.City);
// 等待輸入退出
Console.ReadKey();
}
}
}
小結(jié)
以上是.NET 序列化實(shí)現(xiàn)JSON格式的常用序列化工具,簡(jiǎn)單介紹其特點(diǎn)及簡(jiǎn)單實(shí)現(xiàn)示例。
該文章在 2024/8/19 10:58:40 編輯過(guò)