Я использую Json.NET, и я пытаюсь сохранить сопоставление словаря из перечисления в список других перечислений. Ключи перечисления предназначены для указания того, какой продукт и значение, отображаемое этим продуктом. Ключевое перечисление - это список перечислений, которые указывают, какие функции доступны под ним.Newtonsoft JSON словаря в список разных перечислений
Я думал о том, что тип перечисления в каждом списке значений зависит от того, к какому продукту они принадлежат.
У меня есть следующие классы:
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);
Я получаю ошибку followering:
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#.
'Enum' - это тип в этом случае. Вы пытаетесь добавить ValEnum1 и ValEnum2 в этот список? Когда вы делаете наследование, я не думаю, что Enum - это ответ. – Thor
Да, я должен был упомянуть, что Список значений будет либо List, либо List . Я отредактирую сообщение, чтобы включить его. Есть ли лучший подход, или я должен сделать некоторый базовый класс для всех «sub-Enum» для наследования? –
thebenismightier
Похоже, что это в основном дубликат [Deserialize specific enum в system.enum в Json.Net] (https://stackoverflow.com/questions/31351262). Или, может быть, это ближе: [Deserialize Dictionary <строка, объект> с значениями перечисления в C#] (https://stackoverflow.com/questions/38336390). Кто-нибудь из них отвечает на ваш вопрос или вам нужно что-то более конкретное? – dbc