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

在.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"

    }

]

我无法获得枚举值作为响应。所以尝试了以下选项

  1. 装饰类属性 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/

  2. 装饰枚举 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/

  3. 全局添加转换器 - https://exceptionnotfound.net/serializing-enumerations-in-asp-net-web-api/

  4. 在每个枚举值中提及枚举成员 ([EnumMember])。

什么都没解决。


小怪兽爱吃肉
浏览 178回答 1
1回答

撒科打诨

您不小心碰到了 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 };        });
打开App,查看更多内容
随时随地看视频慕课网APP