C# 编程指南:Newtonsoft.Json(也称为Json.NET)序列化和反序列化

在C#中,Newtonsoft.Json(也称为Json.NET)是一个常用的第三方库,提供了强大的JSON序列化和反序列化功能。

部分
1
安装Json.NET库
打开Visual Studio的NuGet包管理器,搜索并安装"Newtonsoft.Json"包,或者使用NuGet控制台运行以下命令:
Install-Package Newtonsoft.Json
部分
2
JSON序列化(JSON Serialization)
JSON序列化是将对象转换为JSON格式的过程。
在C#中,可以使用JsonConvert类的SerializeObject方法进行JSON序列化。
using Newtonsoft.Json;

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

public class Program
{
    static void Main(string[] args)
    {
        Person person = new Person { Name = "John", Age = 30 };

        string jsonString = JsonConvert.SerializeObject(person);
        Console.WriteLine(jsonString);
    }
}

在上述示例中,我们定义了一个名为Person的类。我们使用JsonConvert类的SerializeObject方法将Person对象序列化为JSON字符串,并打印出JSON字符串。

部分
3
JSON反序列化(JSON Deserialization)
JSON反序列化是将JSON格式的数据还原为对象的过程。
在C#中,可以使用JsonConvert类的DeserializeObject方法进行JSON反序列化。
using Newtonsoft.Json;

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

public class Program
{
    static void Main(string[] args)
    {
        string jsonString = "{\"Name\":\"John\",\"Age\":30}";

        Person person = JsonConvert.DeserializeObject<Person>(jsonString);
        Console.WriteLine("Name: " + person.Name);
        Console.WriteLine("Age: " + person.Age);
    }
}

在上述示例中,我们使用JsonConvert类的DeserializeObject方法将之前序列化的JSON字符串反序列化为Person对象,并打印出对象的属性值。 Newtonsoft.Json提供了许多选项来自定义序列化和反序列化过程,如处理null值、忽略缺失的属性或自定义转换器等。你可以在Json.NET的官方文档中进一步了解这些选项。 使用Newtonsoft.Json库的优势在于其灵活性和广泛的社区支持,尤其在处理复杂的JSON结构或需要特定功能的情况下。

部分
4
自定义转换器
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;

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

public class PersonConverter : JsonConverter<Person>
{
    public override void WriteJson(JsonWriter writer, Person value, JsonSerializer serializer)
    {
        JObject personObject = new JObject();
        personObject.Add("Name", value.Name);
        personObject.Add("Age", value.Age);

        personObject.WriteTo(writer);
    }

    public override Person ReadJson(JsonReader reader, Type objectType, Person existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject personObject = JObject.Load(reader);

        string name = personObject["Name"].Value<string>();
        int age = personObject["Age"].Value<int>();

        return new Person { Name = name, Age = age };
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Person person = new Person { Name = "John", Age = 30 };

        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.Converters.Add(new PersonConverter());

        string jsonString = JsonConvert.SerializeObject(person, settings);
        Console.WriteLine(jsonString);

        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonString, settings);
        Console.WriteLine("Name: " + deserializedPerson.Name);
        Console.WriteLine("Age: " + deserializedPerson.Age);
    }
}

在上述示例中,我们定义了一个名为Person的类,并创建了一个名为PersonConverter的自定义转换器,继承自JsonConverter<Person>。我们重写了WriteJson方法和ReadJson方法来自定义Person对象的序列化和反序列化过程。 在Main方法中,我们创建了一个JsonSerializerSettings对象,并将自定义转换器添加到Converters集合中。然后,我们使用JsonConvert.SerializeObject方法将Person对象序列化为JSON字符串,并使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为Person对象。 通过自定义转换器,你可以根据特定的需求处理任意复杂的JSON数据类型。你可以在转换器中访问JSON的各个部分,并根据需要进行操作和转换。 请注意,自定义转换器通常用于处理特定类型的对象,而不是所有对象。因此,你可能需要根据需要创建多个自定义转换器,并根据对象类型进行适当的选择。

    目录

  • 1.
    安装Json.NET库
  • 2.
    JSON序列化(JSON Serialization)
  • 3.
    JSON反序列化(JSON Deserialization)
  • 4.
    自定义转换器