在 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。
本文内容总结: