天津储鑫盛钢材现货供应商 发表于 2025-11-7 04:04:43

.NET中的JSON序列化库:Newtonsoft.Json与System.Text.Json对比与示例

在.NET生态体系中,存在多个用于JSON序列化的库,此中最为常用和着名的包罗Newtonsoft.Json(也称为Json.NET)和System.Text.Json。以下是这两个库的区别:
Newtonsoft.Json(Json.NET)


[*]功能与机动性:Newtonsoft.Json功能丰富,提供了广泛的序列化和反序列化设置,包罗日期格式处置惩罚、空值处置惩罚、循环引用处置惩罚等。它还支持LINQ to JSON,允许对JSON文档进办法态查询和操纵。别的,Newtonsoft.Json可以大概处置惩罚复杂的JSON结构,包罗嵌套对象、数组和字典,并支持各种数据范例,如私有字段、只读属性等。
[*]性能:在处置惩罚简单的JSON数据时,Newtonsoft.Json性能良好。然而,在处置惩罚大规模数据或举行频仍的序列化和反序列化操纵时,其性能大概稍逊于System.Text.Json。
[*]社区与支持:Newtonsoft.Json是.NET生态体系中广泛利用的JSON库,拥有大量的教程和社区支持。
System.Text.Json


[*]性能:System.Text.Json是.NET Core 3.0及更高版本中的内置库,专门操持用于高性能的JSON处置惩罚。在很多场景中,其性能优于Newtonsoft.Json,特殊是在序列化和反序列化大量数据时。
[*]功能与机动性:固然System.Text.Json功能不如Newtonsoft.Json那么丰富,但它提供了根本的序列化和反序列化功能,并允许通过JsonSerializerOptions举行自界说设置。然而,与Newtonsoft.Json相比,它在处置惩罚复杂JSON结构或须要高度机动性的场景时大概显得不敷。
[*]集成度:作为.NET Core的内置库,System.Text.Json与.NET平台精麋集成,无需额外安装即可利用。
对比总结


[*]性能:System.Text.Json在处置惩罚大规模数据或举行频仍的序列化和反序列化操纵时性能更优。
[*]功能与机动性:Newtonsoft.Json提供了更丰富的功能和更高的机动性,实用于处置惩罚复杂的JSON结构和须要高度自界说的场景。
[*]集成度与易用性:System.Text.Json作为.NET Core的内置库,与.NET平台精麋集成,利用更为轻便。而Newtonsoft.Json则须要通过NuGet包管理器举行安装。
以下是关于Newtonsoft.Json(Json.NET)和System.Text.Json的序列化与反序列化的详细例子:
Newtonsoft.Json(Json.NET)


[*]安装
利用NuGet包管理器安装Newtonsoft.Json库。可以在Visual Studio的NuGet包管理器控制台中实行以下下令:
Install-Package Newtonsoft.Json

[*]序列化
将一个C#对象序列化为JSON字符串:
using Newtonsoft.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var person = new Person { Name = "Alice", Age = 30 };
var json = JsonConvert.SerializeObject(person);
Console.WriteLine(json); // 输出: {"Name":"Alice","Age":30}

[*]反序列化
将JSON字符串反序列化为C#对象:
using Newtonsoft.Json;

var json = "{\"Name\":\"Alice\",\"Age\":30}";
var person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name); // 输出: Alice
Console.WriteLine(person.Age);// 输出: 30

[*]高级功能
Newtonsoft.Json还支持很多高级功能,如自界说序列化器、处置惩罚日期格式、忽略属性等。比方,通过JsonSerializerSettings自界说序列化活动:
var settings = new JsonSerializerSettings
{
    Formatting = Formatting.Indented, // 格式化输出
    NullValueHandling = NullValueHandling.Ignore // 忽略空值
};

var json = JsonConvert.SerializeObject(person, settings);

System.Text.Json


[*]序列化
将一个C#对象序列化为JSON字符串:
using System.Text.Json;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var person = new Person { Name = "Bob", Age = 25 };
var json = JsonSerializer.Serialize(person);
Console.WriteLine(json); // 输出: {"Name":"Bob","Age":25}

[*]反序列化
将JSON字符串反序列化为C#对象:
using System.Text.Json;

var json = "{\"Name\":\"Bob\",\"Age\":25}";
var person = JsonSerializer.Deserialize<Person>(json);
Console.WriteLine(person.Name); // 输出: Bob
Console.WriteLine(person.Age);// 输出: 25

[*]自界说活动
System.Text.Json也允许通过JsonSerializerOptions自界说序列化活动,如定名战略、空值处置惩罚、日期时间格式化等:
var options = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 驼峰命名
    WriteIndented = true, // 格式化输出
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault // 忽略默认值
};

var json = JsonSerializer.Serialize(person, options);

以上例子展示了怎样利用Newtonsoft.Json和System.Text.Json举行根本的序列化和反序列化操纵,并展示了怎样通过设置自界说序列化活动来满意特定需求。
页: [1]
查看完整版本: .NET中的JSON序列化库:Newtonsoft.Json与System.Text.Json对比与示例