.Net核心枚举值获取响应后未序列化

时间:2018-09-13 07:02:59

标签: c# .net enums .net-core asp.net-core-webapi

在.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])。

什么都没解决。

1 个答案:

答案 0 :(得分:2)

您不小心碰到了Newtonsoft功能(记录不充分)。可以在此找到更长的描述 question

简而言之:您有一个名为MyPropertyName的属性和一个名为MyPropertyNameSpecified的属性,即在其他属性名称后附加了Specified,Newtonsoft的默认行为是不序列化{{1} },当MyPropertyNameMyPropertyNameSpecified时。

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

false

要在.NET Core项目中编辑JSON序列化程序设置,请在new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { IgnoreIsSpecifiedMembers = true } }; 方法中提供选项:

ConfigureServies