System.Text.Json:当json配置具有通用JsonStringEnumConverter时,如何将单个枚举序列化为数字[重复]
Posted
技术标签:
【中文标题】System.Text.Json:当json配置具有通用JsonStringEnumConverter时,如何将单个枚举序列化为数字[重复]【英文标题】:System.Text.Json: How to serialize a individual enum as number when the json configuration has a general JsonStringEnumConverter [duplicate] 【发布时间】:2021-11-11 15:12:22 【问题描述】:System.Text.Json 默认为 enum 序列化编号。在我的情况下,我需要 Startup.cs 中的字符串,我添加了一个转换器以将所有 enum 序列化为字符串,如此处所示。
.AddJsonOptions(
c =>
c.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
);
但我有一个特定的枚举,我需要将其序列化为数字。
public enum fareStatus
None = 0,
Club = 1,
NoClub = 2
在这种情况下,我想得到 0,1,2 而不是字符串,
在这种情况下可能吗? 谢谢
【问题讨论】:
如果我没看错:docs.microsoft.com/en-us/dotnet/standard/serialization/… 那么应用于该枚举类型属性的转换器应该优先于列表中的转换器。但不要相信我的话。没试过。 感谢您的回答,我尝试使用其他转换器但对我不起作用,是否有转换器可以将序列化恢复为其默认值?如果存在,那应该是一个不错的解决方案。如果不是,我想我需要创建一个自定义转换器 您可以发布您尝试序列化的对象吗? 使用new OptOutJsonConverterFactory(new JsonStringEnumConverter(), typeof(fareStatus))
,其中OptOutJsonConverterFactory
来自this answer 到Exclude an enum property of a Model from using the JsonStringEnumConverter which is globally set at the Startup?。
【参考方案1】:
如果你想从枚举中获取数字,试试这个
var item = new Item Status = fareStatus.NoClub ;
var options = new JsonSerializerOptions();
var json= JsonSerializer.Serialize(item,options);
json
"Status":2
试试这段代码
var options = new JsonSerializerOptions();
options.Converters.Add(new JsonStringEnumConverter());
var json= JsonSerializer.Serialize(item,options);
item=JsonSerializer.Deserialize<Item>(json,options);
json
"Status":"NoClub"
类
public class Item
public fareStatus Status get; set;
【讨论】:
以上是关于System.Text.Json:当json配置具有通用JsonStringEnumConverter时,如何将单个枚举序列化为数字[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 System.Text.Json 从 json 文件读取到 IEnumerable
System.Text.Json.JsonSerializer.Serialize 返回空 Json 对象“”[重复]
使用 System.Text.Json 修改 JSON 文件