在.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"
}
]
我无法获得枚举值作为响应。 所以尝试了以下选项
什么都没解决。
答案 0 :(得分:2)
您不小心碰到了Newtonsoft功能(记录不充分)。可以在此找到更长的描述 question。
简而言之:您有一个名为MyPropertyName
的属性和一个名为MyPropertyNameSpecified
的属性,即在其他属性名称后附加了Specified
,Newtonsoft的默认行为是不序列化{{1} },当MyPropertyName
为MyPropertyNameSpecified
时。
您的问题的解决方案是重命名某些属性或使用以下设置:
false
要在.NET Core项目中编辑JSON序列化程序设置,请在new JsonSerializerSettings
{
ContractResolver = new DefaultContractResolver { IgnoreIsSpecifiedMembers = true }
};
方法中提供选项:
ConfigureServies