我有一个像这样的json字符串
{
'EnumValue': 'Foo'
}
我正在将此值反序列化为带有可能值Bar
和Baz
的枚举的类。由于此枚举中不包含"Foo"
,因此使用Newtonsofts JsonConverter将此字符串转换为类实例会引发错误。有什么方法可以在我的枚举中包含一个捕获所有任意值的默认值?可以在this fiddle中找到该代码。
[如果我还记得,Json.NET被指示使用[JsonConverter(typeof(StringEnumConverter))]属性将枚举值序列化/反序列化为字符串。
public enum CarGenre
{
[EnumMember(Value = "Sport Car")]
Sport,
[EnumMember(Value = "Home Car")]
Home
}
-
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public class Car
{
public string CarName { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public CarGenre Genre { get; set; }
}
这将产生以下JSON:
{
"CarName": "something",
"Genre": "Home Car"
}
在上面的示例中,如果在枚举声明中未提供[EnumMember(Value =“ Home Car”]),则采用枚举值的字符串表示形式:
{
"CarName": "something",
"Genre": "Home"
}
根据我从how Newtonsoft parses enums的了解,这是不可能的。
您可以尝试添加字符串属性并将其解析为get属性(Fiddle here):
public SampleEnum EnumRealValue {
get {
if(Enum.TryParse<SampleEnum>(EnumValue, out SampleEnum result)) {
return result;
} else {
return default(SampleEnum);
}
}
}
public string EnumValue {get; set;}