C#—Json序列化和反序列化
在C#中,可以使用System.Web.Script.Serialization.JavaScriptSerializer類來序列化和反序列化JSON數據。
可以使用Newtonsoft.Json庫進行JSON的序列化。
可以使用.NET內置的System.Text.Json庫來進行JSON的序列化。
json文件格式
[ { Name:"za",Age:10} { Name:"zs",Age:11} ]
一、使用JavaScriptSerializer類來序列化和反序列化
實例操作
using System;
using System.Web.Script.Serialization;public class Program
{public static void Main(){// 創建一個示例對象var person = new Person{Name = "張三",Age = 30};// 序列化對象到JSON字符串JavaScriptSerializer serializer = new JavaScriptSerializer();string json = serializer.Serialize(person);Console.WriteLine(json);// 反序列化JSON字符串到對象string jsonString = "{\"Name\":\"李四\",\"Age\":25}";Person deserializedPerson = serializer.Deserialize<Person>(jsonString);Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");}
}public class Person
{public string Name { get; set; }public int Age { get; set; }
}
二、使用Newtonsoft.Json庫進行JSON的序列化。
本方法采用的是第三方類庫實現json序列化,Newtonsoft.Json(JSON.ENT)包;(本第三方支持弱類型轉換)
Newtonsoft.Json 相比于 System.Text.Json,具有以下優勢和特點
(1)使用廣泛 多年來已經存在并廣泛使用,Newtonsoft.Json 是一個成熟的第三方庫,在 .NET 社區中被廣泛接受和使用。它擁有豐富的功能和強大的靈活性,已經在許多項目中得到驗證。
(2)功能豐富 更豐富的功能,Newtonsoft.Json 提供了一些更高級的功能,如完全自定義的序列化和反序列化邏輯,包括對循環引用的處理、自定義轉換器、忽略屬性等等。它可以方便地處理一些復雜的 JSON 數據場景。
(3)支持若類型轉換的特點
實例操作
首先,需要安裝Newtonsoft.Json包,可以通過NuGet進行安裝。
using Newtonsoft.Json;public class Person
{public string Name { get; set; }public int Age { get; set; }
}Person person = new Person
{Name = "John Doe",Age = 30
};// 序列化
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);// 反序列化
string data = "{\"Name\":\"李四\",\"Age\":25}";
person=JsonConvert.DeserializeObject<Person>(data);
三、使用.NET內置的System.Text.Json庫來進行JSON的序列化
System.Text.Json 相比于 Newtonsoft.Json,具有以下優勢和特點
(1)性能 System.Text.Json 在性能方面進行了優化,通常比 Newtonsoft.Json 更快。它利用了新的讀寫 API,采用更高效的內部實現,以提供更好的性能和內存利用率。
(2)屬于 .NET Core System.Text.Json 是 .NET Core 的一部分,因此在創建跨平臺應用程序時,不需要額外的依賴項。這使得在 .NET Core 平臺上使用它更加方便。
(3)簡單場景 System.Text.Json 提供了一些簡化的 API,使得在處理簡單的 JSON 數據時更容易操作。 例如,可以直接通過 JsonSerializer.Deserialize() 方法進行快速的反序列化,而無需像在 Newtonsoft.Json 中那樣使用 JsonConvert.DeserializeObject()。
(4)默認是強類型轉換,比如:實體類定義的是字符串,json字符串返回的是整型,轉換時會報錯
實例操作
首先,需要安裝System.Text.Json包,可以通過NuGet進行安裝。
using System;
using System.Text.Json;namespace SerializeJsonExample
{class Program{static void Main(string[] args){// 創建一個示例對象var person = new Person{Name = "張三",Age = 30,};// 使用JsonSerializer.Serialize方法將對象序列化為JSON字符串string jsonString = JsonSerializer.Serialize(person);Console.WriteLine(jsonString);// 輸出:{"Name":"張三","Age":30}// 使用JsonSerializer.Deserialize方法將Json字符串反序列化為對象string data = "{\"Name\":\"李四\",\"Age\":25}";Person p = JsonSerializer.Deserialize<Person>(data)}}// 定義一個簡單的Person類,用于序列化示例public class Person{public string Name { get; set; }public int Age { get; set; }}
}
System.Text.Json包可以在模型類中進行指定數據
// json在序列化的時候可以把Code序列化成服務器中相對應的code,
public class One
{[JsonPropertyName("code")]public string Code { get; set; }[JsonPropertyName("message")]public string Message { get; set; }
}