在.Net 5.0中,可以使用System.Text.Json对枚举进行序列化,默认序列化枚举的值为整数。
System.Text.Json对枚举进行序列化
大多数序列化示例代码将 JsonSerializerOptions.WriteIndented 设置为
使用编码格式将中文字符串序列化为 中日韩统一表意文字(CJK Unified Ideographs)
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.BasicLatin, System.Text.Unicode.UnicodeRanges.CjkUnifiedIdeographs)
参考文档:
https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json?view=net-5.0
https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json.serialization?view=net-5.0
将枚举值转换为字符串以及从字符串转换为枚举值。
https://docs.microsoft.com/zh-cn/dotnet/api/system.text.json.serialization.jsonstringenumconverter?view=net-5.0
JsonStringEnumConverter
继承关系:
Object--JsonConverter--JsonConverterFactory---JsonStringEnumConverter
注解
读取不区分大小写。
新建.Net 5.0 控制台应用程序JsonEnumDemo,【需visual studio 2019 并且 安装微软最新框架.net 5.0】
测试源程序如下:
using System;
using System.Text.Json;
namespace JsonEnumDemo
{
class Program
{
static void Main(string[] args)
{
Console.SetWindowSize(width: 110, 25);
Console.WriteLine("...Json序列化测试类的枚举属性默认转化为数字,默认中文转化为Unicode字符...");
Employee employee = new Employee()
{
EmployeeName = "张三",
Age = 25,
Address = "中国",
WeekDay = DayOfWeek.Wednesday
};
string result = JsonSerializer.Serialize
Console.WriteLine(result);
Console.WriteLine("...Json序列化测试类的枚举属性转化为字符串描述,添加特性[JsonConverter(typeof(JsonStringEnumConverter))]...");
EmployeeTest employeeTest = new EmployeeTest()
{
EmployeeName = "李四",
Age = 22,
Address = "伊拉克",
WeekDay = DayOfWeek.Thursday
};
string resultTest = JsonSerializer.Serialize
new JsonSerializerOptions()
{
//中日韩统一表意文字(CJK Unified Ideographs) CJK (Chinese Japanese Korean) 汉字。CJK 是《GB2312-80》、《BIG5》等字符集的超集
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.BasicLatin, System.Text.Unicode.UnicodeRanges.CjkUnifiedIdeographs),
WriteIndented = true
});
Console.WriteLine(resultTest);
Console.ReadLine();
}
}
///
///
class Employee
{
///
///
public string EmployeeName { get; set; }
///
///
public int Age { get; set; }
///
///
public string Address { get; set; }
///
///
public DayOfWeek WeekDay { get; set; }
}
///
///
class EmployeeTest
{
///
///
public string EmployeeName { get; set; }
///
///
public int Age { get; set; }
///
///
public string Address { get; set; }
///
///
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.JsonStringEnumConverter))]
public DayOfWeek WeekDay { get; set; }
}
}
程序运行如图:
