C#使用Newtonsoft的Json.NET进行对象的序列化与反序列化

什么是Json.NET?

Json.NET是一个开源的用于.NET平台的JSON处理库,它支持 JSON 的序列化、反序列化、转换和验证。Json.NET 支持.NET平台的所有版本,包括 .NET Framework、.NET Core 和 Xamarin。它有完整的文档说明,而且非常简单易用且功能强大,因此被广泛应用于各种.NET开发场景。

为什么要使用Json.NET进行序列化与反序列化?

在.NET开发过程中,我们经常需要在不同的平台、不同的程序或者不同的网络环境中将对象序列化或反序列化。序列化是指将对象转换成JSON字符串等形式便于传输或保存。反序列化则是将JSON字符串等形式转换回原来的对象形式。在进行序列化和反序列化时,原生的.NET库不够灵活,使用Json.NET能够更加方便、快捷地进行序列化和反序列化操作。

使用Json.NET进行对象的序列化操作

1.添加Json.NET依赖

要使用Json.NET,需要先通过NuGet包管理器将其添加进项目中。打开Visual Studio的NuGet包管理器,搜索Json.NET,选择最新版本并添加到项目中。

2.定义待序列化的对象

在进行序列化操作前,需要先定义待序列化的对象。以下是一个示例类代码:

public class Student

{

public string Name { get; set; }

public int Age { get; set; }

public List<string> Courses { get; set; }

}

3.进行对象的序列化

定义待序列化的对象后,需要进行序列化操作。我们可以将C#对象序列化为JSON字符串,以便在网络中进行传输或保存。Json.NET提供了JsonConvert类型,可以实现对象的序列化功能。以下是示例代码:

Student student = new Student { Name = "张三", Age = 18, Courses = new List<string> { "语文", "数学" } };

string jsonStr = JsonConvert.SerializeObject(student);

Console.WriteLine(jsonStr);

以上代码中,我们新建一个Student的实例对象,设置好Name、Age、Courses属性的值后,使用JsonConvert序列化成JSON字符串并输出。输出结果为:

{"Name":"张三","Age":18,"Courses":["语文","数学"]}

4.序列化时的配置

Json.NET提供了一些配置项,可以实现不同的序列化行为。以下是几个常用的序列化配置项:

Formatting:指定输出JSON字符串的格式,可以设置为Indented以使输出内容更加可读。

NullValueHandling:指定如何处理空值。可以设置为忽略掉空值,或者序列化为空。

TypeNameHandling:指定在序列化时包含类型信息。

以下是一个示例代码,使用JsonConvert进行序列化,并配置为Indented格式、包含空属性,并忽略掉环状引用(防止序列化成无限循环的JSON字符串):

Student student = new Student { Name = "张三", Age = 18, Courses = null };

string jsonStr = JsonConvert.SerializeObject(student, Formatting.Indented, new JsonSerializerSettings

{

NullValueHandling = NullValueHandling.Include,

ReferenceLoopHandling = ReferenceLoopHandling.Ignore,

});

Console.WriteLine(jsonStr);

输出结果为:

{

"Name": "张三",

"Age": 18,

"Courses": null

}

使用Json.NET进行对象的反序列化操作

1.定义待反序列化的JSON字符串

在进行反序列化操作前,需要定义待反序列化的JSON字符串。以下是一个示例JSON字符串:

{"Name":"张三","Age":18,"Courses":["语文","数学"]}

2.进行JSON字符串的反序列化

定义好待反序列化的JSON字符串后,需要进行反序列化操作。我们可以将JSON字符串反序列化成C#对象,以便在程序中进行操作。Json.NET提供了JsonConvert类型,可以实现JSON字符串的反序列化功能。以下是示例代码:

string jsonStr = "{\"Name\":\"张三\",\"Age\":18,\"Courses\":[\"语文\",\"数学\"]}";

Student student = JsonConvert.DeserializeObject<Student>(jsonStr);

Console.WriteLine($"姓名:{student.Name},年龄:{student.Age},选修课程:{string.Join(",", student.Courses)}");

以上代码中,我们新建一个JSON字符串,然后使用JsonConvert反序列化成C#对象,并输出各个属性的值。输出结果为:

姓名:张三,年龄:18,选修课程:语文,数学

3.反序列化时的配置

Json.NET提供了一些配置项,可以实现不同的反序列化行为。以下是几个常用的反序列化配置项:

MissingMemberHandling:指定如何处理JSON中不存在的属性。

DateTimeZoneHandling:指定如何处理日期时间类型的时区信息。

ConstructorHandling:指定如何处理构造函数。

以下是一个示例代码,使用JsonConvert进行反序列化,并配置为忽略掉JSON中不存在的属性:

string jsonStr = "{\"Name\":\"张三\",\"Age\":18,\"Courses\":[\"语文\",\"数学\"],\"Gender\":\"男\"}";

Student student = JsonConvert.DeserializeObject<Student>(jsonStr, new JsonSerializerSettings

{

MissingMemberHandling = MissingMemberHandling.Ignore,

});

Console.WriteLine($"姓名:{student.Name},年龄:{student.Age},选修课程:{string.Join(",", student.Courses)}");

输出结果为:

姓名:张三,年龄:18,选修课程:语文,数学

总结

本文介绍了Json.NET的基本使用方法,包括如何使用Json.NET对C#对象进行序列化和反序列化操作,以及如何配置Json.NET以实现不同的序列化和反序列化行为。使用Json.NET能够方便、快捷地实现对象的序列化和反序列化,同时具有良好的跨平台支持。以上内容希望能够对你有所帮助。

后端开发标签