我有个团结计划。使用我可以使用的常用JSON工具,我尝试反序列化一个使用位标志(即类似于)的枚举
[Flags]
enum Terrain
{
NORMAL = 0,
FOREST = 1,
SWAMP = 2,
CAVE = 4
}
字符串
在json中,它类似于CityTerrain:“FOREST”,但是似乎反序列化不喜欢人类可读的字符串枚举(我假设它想要一个整数),这对我来说特别麻烦,当我想要能够合并标志时,位标志。森林|洞穴。
XML处理的位标志枚举开箱即用。为什么json这种上级的格式看起来与它斗争得如此之厉害?我应该做一个枚举 Package 器来处理这个的反序列化吗?不管我做什么,我觉得我的解决方案将是笨重的,我会不喜欢它。
最终它需要是人类可读的,我不会接受一个“解决方案”,我的bitflag枚举必须在json中表示为5。这个练习的全部要点是它需要是人类可读的,但仍然是可反序列化的。
1条答案
按热度按时间rks48beu1#
对于
Newtonsoft.Json
可以使用
StringEnumConverter
并将其沿着到字符串
和(显然是可选的)
型
在我的反序列化测试中,它似乎也只适用于
型
对于
System.Text.Json
你可以使用等价的
JsonStringEnumConverter
并通过例如这样的选项传递它。型
和/或
型
.Net Fiddle for both above的
注(以下
JsonUtility
也适用):两者基本上都经过ToString
和Enum.Parse
,所以在json中它将读取例如。型
如果出于某种原因,您确实需要使用
FOREST|SWAMP
,则必须实现自己定制JsonConverter
(Newtonsoft)或相应的JsonConverter
(System.Text.Json)。基本上使用相同的和做一些类似的(伪代码)
型
和/或
型
内置
JsonUtility
不幸的是,没有类似的东西。相反,您必须覆盖整个类的序列化,例如。
型
备注:
Terrain
的类型重复此操作,并且应进行JSON序列化