gpt4 book ai didi

c# - Json.NET StringEnumConverter 并不总是有效

转载 作者:太空狗 更新时间:2023-10-29 22:36:57 42 4
gpt4 key购买 nike

我有一个枚举:

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”则不然。知道为什么吗?

更新:嗯,“喜欢”和“在”起作用的原因是它们与枚举名称相匹配。将 GreaterThan 重命名为 Gt(等)有效。所以真正的问题是为什么不使用 StringEnumConverter?

最佳答案

那么,您必须将 [JsonConverter(typeof(StringEnumConverter))] 属性直接放在 enum 声明上,而不是 Operator 属性GridFilter 如果您希望在类 GridFilter 的上下文之外反序列化时使用它:

[JsonConverter(typeof(StringEnumConverter))] // Add this
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")] // Remove this
public FilterOperator Operator { get; set; }
}

关于c# - Json.NET StringEnumConverter 并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28187150/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com