请听我详细讲解如何使用Json.Net库来进行C#中JSON与对象的序列化与反序列化。
一、Json.Net简介
Json.Net是一个高性能的.NET框架,它可以帮助我们在C#代码中轻松地进行JSON的读写操作。此外,Json.Net被广泛地应用于C#中处理JSON数据的需求,很多开源项目也是基于Json.Net实现的。
二、JSON与对象的序列化
1. 将对象序列化为JSON
Json.Net提供了一个方便的方法JsonConvert.SerializeObject()
,可以将一个对象序列化为JSON字符串。以下代码示例展示了如何将一个Person对象序列化为JSON字符串。
using Newtonsoft.Json;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person person = new Person() {Name = "Jack", Age = 18};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);
// 输出结果:{"Name":"Jack","Age":18}
上述代码中我们定义了一个Person类型的对象,然后调用JsonConvert.SerializeObject()
方法将这个对象转换为JSON字符串。需要注意的是,我们需要在类的定义中给所有的属性添加get; set;
方法,否则Json.Net无法进行序列化操作。
2. 序列化后对JSON进行格式化
有时候我们需要对序列化后得到的JSON字符串进行格式化,以方便我们对JSON数据进行查看和调试。Json.Net提供了Formatting
枚举来控制JSON数据的格式化输出,下面是一段格式化代码示例:
using Newtonsoft.Json;
string json = "{\"Name\":\"Jack\",\"Age\":18}";
string formattedJson = JsonConvert.SerializeObject(json, Formatting.Indented);
Console.WriteLine(formattedJson);
上述代码中,使用JsonConvert.SerializeObject()
方法将一个JSON字符串序列化,然后使用Formatting.Indented
参数对其进行格式化。该参数实现了JSON输出按照层级缩进的格式,并添加了空格、回车符等规范符号。最终输出结果如下:
{
"Name": "Jack",
"Age": 18
}
3. 序列化对象时使用自定义的属性名称
有时候,我们需要将一个对象的某些属性名改变之后再进行序列化为JSON字符串。这时候,我们可以在类定义中使用JsonProperty
属性来修改属性名。
using Newtonsoft.Json;
public class Person
{
[JsonProperty(PropertyName = "person_name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "person_age")]
public int Age { get; set; }
}
Person person = new Person() {Name = "Jack", Age = 18};
string json = JsonConvert.SerializeObject(person);
Console.WriteLine(json);
// 输出结果:{"person_name":"Jack","person_age":18}
上述代码定义了一个Person类,并在其属性上使用了JsonProperty
特性去改变属性名。当我们调用JsonConvert.SerializeObject()
方法进行序列化操作时,JSON字符串中的属性名也被序列化成了我们指定的名称。
三、JSON与对象的反序列化
1. 将JSON字符串反序列化为对象
使用Json.Net反序列化JSON字符串与序列化非常相似,可以通过JsonConvert.DeserializeObject()
方法轻松实现。以下是一段示例代码:
using Newtonsoft.Json;
string json = "{\"Name\":\"Jack\",\"Age\":18}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
上述代码中,我们先定义了一个JSON字符串,然后使用JsonConvert.DeserializeObject()
方法将其反序列化为Person类型的对象。需要注意的是,JsonConvert.DeserializeObject()
方法必须指定反序列化后的对象类型。
2. 处理JSON字符串中缺失的属性
在JSON字符串中有些属性可能是缺失的,我们可以使用DefaultValue
属性来对这种情况进行处理。
using Newtonsoft.Json;
public class Person
{
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Name { get; set; }
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
public int Age { get; set; }
}
string json = "{\"Name\":\"Jack\"}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name); // Jack
Console.WriteLine(person.Age); // 0
上述代码中,我们在Person类的属性上使用了DefaultValueHandling
属性,将其设置为DefaultValueHandling.Ignore
来忽略缺失的属性。当JSON字符串中有属性的值缺失时,反序列化后的对象对应属性的值将会是其对应类型的默认值(Age属性为int类型,其默认值为0)。
至此,我们介绍了Json.Net在C#中使用JSON与对象的序列化与反序列化的攻略。通过上述示例代码,相信您已经对如何使用Json.Net进行序列化和反序列化有了更深入的理解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用Json.Net对JSON与对象的序列化与反序列化 - Python技术站