C# 中怎么读写json文件

发布时间:2021-07-07 15:12:51 作者:Leah
来源:亿速云 阅读:570

C# 中怎么读写 JSON 文件

在现代软件开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于前后端数据传输、配置文件存储等场景。C# 作为一门强大的编程语言,提供了丰富的库和工具来处理 JSON 数据。本文将详细介绍如何在 C# 中读写 JSON 文件,涵盖从基础操作到高级技巧的各个方面。

1. JSON 简介

JSON 是一种基于文本的数据格式,易于人阅读和编写,同时也易于机器解析和生成。它由键值对组成,支持的数据类型包括字符串、数字、布尔值、数组和对象。JSON 的简洁性和灵活性使其成为现代应用程序中数据交换的首选格式。

2. C# 中的 JSON 处理库

在 C# 中,处理 JSON 数据的主要库是 System.Text.JsonNewtonsoft.Json(也称为 Json.NET)。System.Text.Json 是 .NET Core 3.0 及更高版本中引入的官方库,而 Newtonsoft.Json 是一个广泛使用的第三方库,功能更为丰富。

2.1 System.Text.Json

System.Text.Json 是 .NET 官方提供的 JSON 处理库,具有高性能和低内存占用的特点。它支持序列化和反序列化操作,适用于大多数常见的 JSON 处理场景。

2.2 Newtonsoft.Json

Newtonsoft.Json 是一个功能强大的第三方 JSON 库,提供了比 System.Text.Json 更多的功能和灵活性。它支持更复杂的数据类型、自定义序列化和反序列化逻辑,以及更丰富的配置选项。

3. 使用 System.Text.Json 读写 JSON 文件

3.1 安装 System.Text.Json

在 .NET Core 3.0 及更高版本中,System.Text.Json 已经包含在框架中,无需额外安装。如果你使用的是 .NET Framework 或其他版本的 .NET,可以通过 NuGet 包管理器安装 System.Text.Json

dotnet add package System.Text.Json

3.2 读取 JSON 文件

要读取 JSON 文件,首先需要将文件内容读取为字符串,然后使用 JsonSerializer.Deserialize 方法将其反序列化为 C# 对象。

using System;
using System.IO;
using System.Text.Json;

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

class Program
{
    static void Main()
    {
        string jsonString = File.ReadAllText("person.json");
        Person person = JsonSerializer.Deserialize<Person>(jsonString);

        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

3.3 写入 JSON 文件

要将 C# 对象写入 JSON 文件,可以使用 JsonSerializer.Serialize 方法将对象序列化为 JSON 字符串,然后将字符串写入文件。

using System;
using System.IO;
using System.Text.Json;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        string jsonString = JsonSerializer.Serialize(person);

        File.WriteAllText("person.json", jsonString);

        Console.WriteLine("JSON file written successfully.");
    }
}

4. 使用 Newtonsoft.Json 读写 JSON 文件

4.1 安装 Newtonsoft.Json

要使用 Newtonsoft.Json,首先需要通过 NuGet 包管理器安装它:

dotnet add package Newtonsoft.Json

4.2 读取 JSON 文件

使用 Newtonsoft.Json 读取 JSON 文件与 System.Text.Json 类似,但提供了更多的配置选项。

using System;
using System.IO;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        string jsonString = File.ReadAllText("person.json");
        Person person = JsonConvert.DeserializeObject<Person>(jsonString);

        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

4.3 写入 JSON 文件

使用 Newtonsoft.Json 写入 JSON 文件也非常简单。

using System;
using System.IO;
using Newtonsoft.Json;

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

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30 };
        string jsonString = JsonConvert.SerializeObject(person);

        File.WriteAllText("person.json", jsonString);

        Console.WriteLine("JSON file written successfully.");
    }
}

5. 高级技巧

5.1 处理复杂 JSON 结构

在实际应用中,JSON 数据可能包含嵌套对象、数组等复杂结构。System.Text.JsonNewtonsoft.Json 都支持处理这些复杂结构。

using System;
using System.Collections.Generic;
using System.Text.Json;

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public List<Address> Addresses { get; set; }
}

class Program
{
    static void Main()
    {
        string jsonString = File.ReadAllText("person.json");
        Person person = JsonSerializer.Deserialize<Person>(jsonString);

        foreach (var address in person.Addresses)
        {
            Console.WriteLine($"Street: {address.Street}, City: {address.City}");
        }
    }
}

5.2 自定义序列化和反序列化

在某些情况下,可能需要自定义序列化和反序列化逻辑。Newtonsoft.Json 提供了丰富的选项来实现这一点。

using System;
using Newtonsoft.Json;

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

    [JsonIgnore]
    public string Secret { get; set; }
}

class Program
{
    static void Main()
    {
        Person person = new Person { Name = "John Doe", Age = 30, Secret = "Top Secret" };
        string jsonString = JsonConvert.SerializeObject(person);

        Console.WriteLine(jsonString); // Output: {"Name":"John Doe","Age":30}
    }
}

5.3 处理日期和时间

JSON 标准中并没有定义日期和时间的格式,因此在处理日期和时间时需要特别注意。Newtonsoft.Json 提供了 JsonConvert 类来处理日期和时间的序列化和反序列化。

using System;
using Newtonsoft.Json;

public class Event
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

class Program
{
    static void Main()
    {
        Event event = new Event { Name = "Conference", Date = DateTime.Now };
        string jsonString = JsonConvert.SerializeObject(event, Formatting.Indented);

        Console.WriteLine(jsonString);

        Event deserializedEvent = JsonConvert.DeserializeObject<Event>(jsonString);
        Console.WriteLine($"Event Name: {deserializedEvent.Name}, Date: {deserializedEvent.Date}");
    }
}

6. 总结

在 C# 中读写 JSON 文件是一项常见的任务,System.Text.JsonNewtonsoft.Json 是两个主要的工具库。System.Text.Json 是 .NET 官方提供的库,具有高性能和低内存占用的特点,适用于大多数常见的 JSON 处理场景。Newtonsoft.Json 则提供了更多的功能和灵活性,适用于更复杂的 JSON 处理需求。

通过本文的介绍,你应该已经掌握了如何在 C# 中使用这两个库来读写 JSON 文件,并了解了一些高级技巧。希望这些知识能够帮助你在实际开发中更好地处理 JSON 数据。

推荐阅读:
  1. C#处理Json格式文件的源码演示
  2. C# 读写文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

json

上一篇:C# 中怎么利用WPF实现一个登录加载窗体

下一篇:C# 9.0中怎么设置只读属性

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》