将某个JSON值映射到枚举值C#
本文关键字:枚举 映射 JSON | 更新日期: 2023-09-27 18:26:30
我正在为Stack Exchange API创建类。filter_object类型包含一个成员filter_type
,它将是safe
、unsafe
或invalid
。所以我创建了一个这样的枚举:
[JsonConverter(typeof(StringEnumConverter))]
public enum FilterType
{
safe,
@unsafe, // Here lies the problem.
invalid
}
由于unsafe
是一个关键字,我不得不添加一些前缀。但是我如何使值"不安全"以自动映射到@unsafe
?示例JSON:
{
"filter": "....",
"filter_type": "unsafe",
"included_fields": [
"...",
"....",
"....."
]
}
如何反序列化它,使filter_type
自动转换为FilterType.@unsafe
?
更新-已解决:
在标识符之前使用@符号可以与关键字相同。即使@出现在intelligense中,它也能正常工作。
您可以使用JsonProperty,就像这个
public enum FilterType
{
safe,
[JsonProperty("unsafe")]
@unsafe, // Here lies the problem.
invalid
}
然后它将正常工作
class MyClass
{
public FilterType filter_type { get; set; }
}
public class Program
{
public static void Main()
{
var myClass = JsonConvert.DeserializeObject<MyClass>(json);
var itsUnsafe = myClass.filter_type == FilterType.@unsafe;
Console.WriteLine(itsUnsafe);
}
public static string json = @"{
""filter"": ""...."",
""filter_type"": ""unsafe"",
""included_fields"": [
""..."",
""...."",
"".....""
]
}";
}
输出为:
真实
您可以在此处看到工作示例:https://dotnetfiddle.net/6sb3VY