>我正在使用 Json.NET,我正在尝试存储从枚举到其他枚举列表的字典映射。枚举密钥旨在指示哪个产品,以及该产品映射到的值 键枚举是指示其下可用的功能的枚举列表。
我正在考虑让每个值列表中的枚举类型取决于它们所属的产品。
我有以下课程:
public enum KeyEnum {
Key1,
Key2
}
public enum ValEnum1 {
Type1,
Type2
}
public enum ValEnum2 {
Type3,
Type4,
Type5,
Type6
}
class MyClass {
public Dictionary<KeyEnum, List<Enum>> Data { get; set; }
}
我正在尝试做一个
var tmp = new MyClass()
{
Data = new Dictionary<KeyEnum, List<Enum>>()
{
new List<Enum>()
{
ValEnum2.Type6
}
}
}
string newdata = JsonConvert.SerializeObject(tmp);
var myClass = JsonConvert.DeserializeObject<MyClass>(newdata);
我收到以下错误:
Newtonsoft.Json.JsonSerializationException: Error converting value 3 to type 'System.Enum'. Path 'Licenses.Audit[0]', line 1, position 160. ---> System.InvalidCastException: Unable to cast object of type 'System.Int64' to type 'System.Enum'.
我想我可以将所有枚举转换为 int,但使用枚举可能会更好。但是,我不确定如何在 C# 中正确执行此操作。
Newtonsoft将默认值序列化Enum
其数值。然后它不知道如何将该数值序列化回Enum
.您可以使用Enum
上的属性将它们序列化为字符串值(以便数据传输对象是可以理解的),但要反序列化回对象,您必须实现自己的JsonConverter
。
使用更容易序列化的数据类型更容易。