我正在使用Json.NET,我正在尝试将字典映射从枚举存储到其他枚举列表。枚举键用于指示哪个产品,以及该产品映射到的值Key enum是一个枚举列表,用于指示其下可用的功能。
我在考虑让每个值列表中的枚举类型取决于它们属于哪个产品。
我有以下课程:
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#中正确执行此操作。
答案 0 :(得分:0)
Newtonsoft序列化public String everyNth(String str, int n) {
if (n < 1) {
throw new IllegalArgumentException("n must be greater than 0");
}
StringBuilder result = new StringBuilder();
// The index of the previous match
int previous = 0;
for (int i = n-1; i < str.length(); i += n) {
// Add substring from previous match to the current
result.append(str, previous, i);
// Set the new value of previous
previous = i + 1;
}
// Add the remaining sub string
result.append(str, previous, str.length());
return result.toString();
}
默认为其数值。然后它不知道如何将该数值序列化回Enum
。您可以使用Enum
上的属性将它们序列化为字符串值(以便您的数据传输对象可以理解),但要反序列化为对象,您必须实现自己的Enum
。
使用更易于序列化的数据类型更容易。