在.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 };
});
- 1 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消