将某个 JSON 值映射到枚举值 C#
Posted
技术标签:
【中文标题】将某个 JSON 值映射到枚举值 C#【英文标题】:Mapping a certain JSON value to Enum value C# 【发布时间】:2016-03-16 16:34:27 【问题描述】:我正在为 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
?
更新 - 已解决:
在标识符之前使用@符号可以与关键字相同。即使 @ 出现在智能感知中,它也能正常工作。
【问题讨论】:
您也可以像在 C# 中对类名等使用大写字母一样。并添加驼峰式转换器,见this question 所以你不接受我的回答,那真的很好:D @AlbertoMonteiro 这不是正确的答案。即使未映射,如果名称正确,它也会自动被解析为正确的枚举。问题是unsafe
是一个关键字。我已经遇到了前缀@,以便可以将关键字用作标识符。它出现在智能感知中,所以我认为它不起作用。但是在测试中我发现它是正确的。看到没有其他答案,我接受了你的。但是,这不是所做的。所以我不接受它并编辑了我的问题以包含解决方案。我看不出有什么不妥。
@AlbertoMonteiro 我会否决它,因为它不是正确的解决方案,但投票已锁定。 JsonProperty 映射到属性,而不是值。因为它已经包含@,所以它起作用了。试试_unsafe
。你的方法会抛出异常。
【参考方案1】:
你可以像这样使用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
【讨论】:
以上是关于将某个 JSON 值映射到枚举值 C#的主要内容,如果未能解决你的问题,请参考以下文章
具有枚举值的映射的 Dart json_serializable defaultValue