如何解决枚举值在剃须刀页面ASP.NET Core 3.1上不显示EnumMember值
我有一个Razor页面,在该页面上,我在JavaScript数据表中显示数据。我试图将枚举值显示为字符串,但是我的枚举值没有正确的字符串表示形式。
Startup.cs
services.AddRazorPages().AddJsonOptions(options =>
{
options.JsonSerializerOptions.IgnoreNullValues = true;
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
Enums.cs
[JsonConverter(typeof(JsonStringEnumConverter))]
public enum Operation
{
[EnumMember(Value = "None")]
None,[EnumMember(Value = "Send e-mail")]
SendEmail,[EnumMember(Value = "Download file")]
DownloadFile
}
Result.cs
public class Result
{
public int Id { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
[Column(TypeName = "smallint")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public Operation Operation { get; set; }
public bool Success { get; set; }
}
结果页
public IActionResult OnPost()
{
var resultData = _dbContext.Results.ToList();
var jsonData = new {recordsTotal = resultData.Count(),data = resultData
};
return new JsonResult(jsonData);
}
ResultView 这只是JS数据表的脚本
<script>
$(document).ready(function () {
$('#resultDatatable').dataTable({
"processing": true,"serverSide": true,"filter": true,"ajax": {
url: "/Result",type: 'POST',headers: { 'RequestVerificationToken': $('@Html.AntiForgeryToken()').val() }
},"columns": [
{ "data": "id","name": "Id","autoWidth": true,"visible": false},{
"data": "startDate","name": "Start date","render": function (d) {
return moment(d).format("YYYY/MM/DD");}
},{
"data": "endDate","name": "End date","render": function(d) {
return moment(d).format("YYYY/MM/DD");}
},{ "data": "operation","name": "Operation","autoWidth": true },{ "data": "success","name": "Success","autoWidth": true }
]
});
});
</script>
当我调用它时,我从EnumMember值中获得了正确的枚举表示形式:
var test = JsonConvert.SerializeObject(resultData); //SendEmail -> "Send e-mail"
但是,当我:
return new JsonResult(resultData); //SendEmail -> "SendEMail"
我尝试使用此解决方案ASP.NET MVC Core API Serialize Enums to String,但没有得到预期的结果。
解决方法
经过3个小时的奋斗,我发现:
System.Text.Json.Serialization.JsonStringEnumConverter支持将枚举作为字符串进行序列化,但是未实现通过属性重命名。
因此,我使用了此链接中可接受的答案,而我使用的是NewtosoftJson而不是内置于System.Text.Json中的
。services.AddRazorPages().AddNewtonsoftJson(option =>
{
option.SerializerSettings.Converters.Add(new StringEnumConverter());
option.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
});
我也将属性应用于枚举[JsonConverter(typeof(StringEnumConverter))]
[JsonConverter(typeof(StringEnumConverter))]
public enum Operation
{
[EnumMember(Value = "None")]
None,[EnumMember(Value = "Send e-mail")]
SendEmail,[EnumMember(Value = "Download file")]
DownloadFile
}
现在我期望页面上的枚举字符串值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。