当前位置:首页 > 行业动态 > 正文

C#实现的json序列化和反序列化代码实例

C# 实现的 JSON 序列化和反序列化代码实例:该实例展示了如何在 C# 中使用 System.Text.Json 命名空间进行 JSON 数据的序列化与反序列化操作,包括将对象转换为 JSON 字符串以及从 JSON 字符串还原为对象的过程。

在C#中,JSON序列化和反序列化是处理数据交换格式的常见需求,通过使用Newtonsoft.Json库(也称为Json.NET),我们可以方便地将对象转换为JSON字符串(序列化)以及将JSON字符串转换回对象(反序列化),下面是一个详细的代码实例,展示如何在C#中实现这些操作。

C#实现的json序列化和反序列化代码实例  第1张

安装Json.NET库

你需要在你的项目中安装Json.NET库,你可以通过NuGet包管理器来安装:

Install-Package Newtonsoft.Json

创建示例类

创建一个示例类Person,包含一些基本属性:

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

序列化对象为JSON字符串

使用JsonConvert.SerializeObject方法将Person对象序列化为JSON字符串:

using Newtonsoft.Json;
class Program
{
    static void Main(string[] args)
    {
        Person person = new Person
        {
            Name = "John Doe",
            Age = 30,
            Email = "johndoe@example.com"
        };
        string jsonString = JsonConvert.SerializeObject(person);
        Console.WriteLine("Serialized JSON: " + jsonString);
    }
}

输出结果:

{
  "Name": "John Doe",
  "Age": 30,
  "Email": "johndoe@example.com"
}

反序列化JSON字符串为对象

使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为Person对象:

using Newtonsoft.Json;
class Program
{
    static void Main(string[] args)
    {
        string jsonString = @"{
  ""Name"": ""John Doe"",
  ""Age"": 30,
  ""Email"": ""johndoe@example.com""
}";
        Person person = JsonConvert.DeserializeObject<Person>(jsonString);
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}, Email: {person.Email}");
    }
}

输出结果:

Name: John Doe, Age: 30, Email: johndoe@example.com

处理复杂对象和集合

如果你的对象结构更复杂,比如包含嵌套对象或集合,Json.NET同样能够处理。

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}
public class PersonWithAddress : Person
{
    public Address Address { get; set; }
}

序列化和反序列化示例:

using Newtonsoft.Json;
class Program
{
    static void Main(string[] args)
    {
        PersonWithAddress person = new PersonWithAddress
        {
            Name = "Jane Smith",
            Age = 25,
            Email = "janesmith@example.com",
            Address = new Address
            {
                Street = "123 Elm St",
                City = "Somewhere",
                Country = "Neverland"
            }
        };
        string jsonString = JsonConvert.SerializeObject(person, Formatting.Indented);
        Console.WriteLine("Serialized JSON with Indentation: ");
        Console.WriteLine(jsonString);
        PersonWithAddress deserializedPerson = JsonConvert.DeserializeObject<PersonWithAddress>(jsonString);
        Console.WriteLine($"
Deserialized Object Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}, Email: {deserializedPerson.Email}");
        Console.WriteLine($"Address Street: {deserializedPerson.Address.Street}, City: {deserializedPerson.Address.City}, Country: {deserializedPerson.Address.Country}");
    }
}

输出结果:

{
  "Name": "Jane Smith",
  "Age": 25,
  "Email": "janesmith@example.com",
  "Address": {
    "Street": "123 Elm St",
    "City": "Somewhere",
    "Country": "Neverland"
  }
}

FAQs

Q1: 如何处理JSON中的日期时间格式?

A1: Json.NET可以自动处理DateTime类型的序列化和反序列化,如果需要自定义格式,可以使用DateFormatHandling枚举来指定格式。

JsonSerializerSettings settings = new JsonSerializerSettings
{
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
    DateParseHandling = DateParseHandling.MicrosoftDateFormat
};
string jsonString = JsonConvert.SerializeObject(new DateTime(2023, 10, 1), settings);
DateTime dateTime = JsonConvert.DeserializeObject<DateTime>("2023-10-01T00:00:00", settings);

Q2: 如何处理循环引用导致的序列化问题?

A2: 循环引用会导致无限递归,从而引发栈溢出错误,可以通过设置ReferenceLoopHandling属性来避免这个问题:

JsonSerializerSettings settings = new JsonSerializerSettings
{
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
string jsonString = JsonConvert.SerializeObject(person, settings);
Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonString, settings);

小编有话说

通过以上实例,我们展示了如何在C#中使用Json.NET库进行JSON的序列化和反序列化操作,无论是处理简单的对象还是复杂的嵌套结构,Json.NET都能提供强大的功能和灵活的配置选项,使得开发者能够轻松应对各种JSON数据处理需求,希望本文能帮助大家更好地掌握JSON在C#中的应用技巧!

0