为了账号安全,请及时绑定邮箱和手机立即绑定

.Net Core Enum Values 得到响应后未序列化

.Net Core Enum Values 得到响应后未序列化

C#
小怪兽爱吃肉 2022-01-15 17:21:29
在.Net Web API核心解决方案中,我有一个带有枚举类型变量的类(消息),如下所述public enum MessageCode{    [EnumMember]    NULL_PARAMETER,    BLANK_PARAMETER,    EMPTY_PARAMETER,    INVALID_PARAMETER,    PARAMETER_TRUNCATED,    QUERY_NOT_FOUND,    TERM_NOT_FOUND,    LIST_NOT_FOUND,    NO_SEARCH_RESULTS,    NO_UPDATES,    NO_DICTIONARY,    NO_PERMISSION,    LOCKED_PROTOCOL,    NO_TERMS_IN_LIST,    DUPLICATE_TERM}public enum MessageType{    INFO,    WARNING,    ERROR,    FATAL}public class Message{    [JsonConverter(typeof(StringEnumConverter))]    public MessageType MessageType { get; set; }    public bool MessageTypeSpecified;    [JsonConverter(typeof(StringEnumConverter))]    public MessageCode MessageCode { get; set; }    public bool MessageCodeSpecified;    public string MessageParameters;    public string MessageText;}使用邮递员获取对象(消息)的响应时,响应如下 "messages": [    {        "messageTypeSpecified": false,        "messageCodeSpecified": false,        "messageParameters": null,        "messageText": "0"    }]我无法获得枚举值作为响应。所以尝试了以下选项装饰类属性 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/装饰枚举 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/全局添加转换器 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/在每个枚举值中提及枚举成员 ([EnumMember])。什么都没解决。
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

您不小心碰到了 Newtonsoft 功能(没有很好的文档记录)。可以在这个 问题中找到更长的描述。


简而言之:您有一个名为的属性MyPropertyName和一个名为的属性MyPropertyNameSpecified,即Specified附加到其他属性名称,Newtonsoft 的默认行为是在 is 时不序列MyPropertyName化。MyPropertyNameSpecifiedfalse


您的问题的解决方案是重命名某些属性或使用以下设置:


new JsonSerializerSettings

{

    ContractResolver = new DefaultContractResolver { IgnoreIsSpecifiedMembers = true }

};

要在 .NET Core 项目中编辑 JSON 序列化程序设置,请在您的ConfigureServies方法中提供选项:


services.AddMvc()

    .AddJsonOptions(

        options =>

        {

            options.SerializerSettings.ContractResolver =

                new DefaultContractResolver { IgnoreIsSpecifiedMembers = true };

        });


查看完整回答
反对 回复 2022-01-15
  • 1 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信