【发布时间】:2015-03-27 01:14:33
【问题描述】:
我有一个枚举:
public enum FilterOperator
{
[EnumMember(Value = "eq")]
Equals,
[EnumMember(Value = "gt")]
GreaterThan,
[EnumMember(Value = "lt")]
LessThan,
[EnumMember(Value = "in")]
In,
[EnumMember(Value = "like")]
Like
}
还有一个包含枚举属性的类:
public class GridFilter
{
[JsonProperty("operator")]
[JsonConverter(typeof(StringEnumConverter))]
public FilterOperator Operator { get; set; }
}
对象通过 WebAPI 操作传入,并按预期对“like”和“in”进行反序列化,但对于“lg”或“gt”则不然。知道为什么吗?
更新:“like”和“in”起作用的原因是它们与枚举名称匹配。将 GreaterThan 重命名为 Gt (等)有效。所以真正的问题是为什么不使用 StringEnumConverter?
【问题讨论】:
-
你试过用
[JsonConverter(typeof(StringEnumConverter))]装饰FilterOperator本身吗? -
嗯,没想到可以这样设置。遗憾的是,它并没有解决问题,但也没有让问题变得更糟
-
鉴于 'like' 和 'in' 的拼写与它们的装饰器相同,我怀疑你的装饰器实际上也没有为它们做任何事情。
-
你是对的,我删除了 [JsonConverter(typeof(StringEnumConverter))] 并且它仍然工作相同。那么我是否滥用了 StringEnumConverter 和 EnumMember?
-
这是这个问题的副本吗? stackoverflow.com/questions/8999731/…