在 C# 中将对象转换为 JSON

本文关键字:转换 JSON 对象 | 更新日期: 2023-09-25 22:08:22

在这里,您将学习如何使用序列化将 C# 对象转换为 JSON。

JSON(Javascript对象表示法)用于存储和数据传输。它还用于 API 调用,以将数据从 API 交换到不同的 Web 应用程序或从浏览器交换到服务器,反之亦然。

序列化是存储对象状态并能够在需要时重新创建它的过程。它的反面称为反序列化。

.NET 5 框架在 System.Text.Json 命名空间中提供了内置的 JsonSerializer 类,用于将 C# 对象转换为 JSON,反之亦然。

.NET 4.x 框架不提供任何将对象转换为 JSON 的内置JsonSerializer类。 必须在项目中安装 NuGet 包Microsoft.Extensions.Configuration.Json,以包含项目中可用于将对象转换为 JSON 的System.Text.Json.JsonSerializer,反之亦然。

将对象转换为缩小的 JSON 字符串(Convert an Object to a Minified JSON String)

以下示例显示了使用 JsonSerializer 类将对象转换为缩小的 JSON 字符串的过程。序列化方法:

示例: Convert Object to JSON String

using System;
using System.Text.Json;
namespace ObjectToJSONConversion
{
    public class Department
    {
        public int DeptId { get; set; }
        public string DepartmentName { get; set; }
    }
    class Program
    {
        public static void Main()
        {
            Department dept= new Department() { DeptId = 101, DepartmentName= "IT" };
            string strJson = JsonSerializer.Serialize<Department>(dept);
            Console.WriteLine(strJson);
        }
    }
}

Output:

{"DeptId":101,"DepartmentName":"IT"}

如您所见,默认情况下,JSON 字符串在上面的输出中被缩小。

将对象转换为格式化的 JSON 字符串(Convert an Object to a Formatted JSON String)

以下示例显示了将对象转换为格式化的 JSON 字符串的过程:

示例: Convert Object to Formatted JSON String

using System;
using System.Text.Json;
namespace ObjectToJSONConversion
{
    public class Department
    {
        public int DeptId { get; set; }
        public string DepartmentName { get; set; }
    }
    class Program
    {
        public static void Main()
        {
            Department dept= new Department() { DeptId = 101, DepartmentName= "IT" };
            
            var opt = new JsonSerializerOptions(){ WriteIndented=true };
            string strJson = JsonSerializer.Serialize<Department>(dept, opt);
            Console.WriteLine(strJson);
        }
    }
}

Output:

{
    "DeptId": 101,
    "DepartmentName": "IT"
}

在上面的示例中,我们在 Serialize() 方法中指定了一个带有 WriteIndented=true 作为参数的选项。 这将返回带缩进的格式化字符串。

将列表转换为 JSON 字符串(Convert a List to a JSON String)

下面将list collection的对象转换为 JSON 数组。

示例: Convert List to JSON String

using System;
using System.Collections.Generic;
using System.Text.Json;
namespace ObjectToJSONConversion
{
    public class Department
    {
        public int DeptId { get; set; }
        public string DepartmentName { get; set; }
    }
    class Program
    {
        public static void Main()
        {
            var deptList = new List<Department>(){
			new Department() { DeptId = 101, DepartmentName= "IT" },
			new Department() { DeptId = 102, DepartmentName= "Accounts" }
		};
		var opt = new JsonSerializerOptions(){ WriteIndented=true };
		string strJson = JsonSerializer.Serialize<IList<Department>>(deptList, opt);
        Console.WriteLine(strJson);
    }
}

Output:

[
  {
    "DeptId": 101,
    "DepartmentName": "IT"
  },
  {
    "DeptId": 102,
    "DepartmentName": "Accounts"
  }
]

将对象转换为 UTF-8 字符串(Convert an Object to a UTF-8 String)

序列化为 utf-8 字节数组比字符串方法快一点。这是因为不需要 utf-8 的字节转换为 utf-16 的字符串。

以下示例显示了使用 JsonSerializer.SerializeToUtf8Bytes 方法将对象转换为缩小的 JSON 字符串

示例: Convert Object to Utf-8 String

using System;
using System.Text.Json;
namespace ObjectToJSONConversion
{
    public class Department
    {
        public int DeptId { get; set; }
        public string DepartmentName { get; set; }
    }
    class Program
    {
        public static void Main()
        {
            Department dept= new Department() { DeptId = 101, DepartmentName= "IT" };
            
            byte[] utf8bytesJson = JsonSerializer.SerializeToUtf8Bytes(dept);
            string strJson = System.Text.Encoding.UTF8.GetString(utf8bytesJson);
            Console.WriteLine(strJson);
        }
    }
}

Output:

{"DeptId":101,"DepartmentName":"IT"}

因此,可以使用 .NET 4.x 和 .NET 5 中的JsonConvert.Serialize()方法以不同的方式将 C# 对象转换为 JSON。


本文内容总结: