Десериализовать определенный enum в system.enum в Json.Net
У меня есть довольно общий класс 'правила', который я использую для управления поведением механизма анализа, который я пишу:
public class Rule
{
/// <summary>
/// The general rule type.
/// </summary>
public RuleType RuleType { get; set; }
/// <summary>
/// The human-readable description of the rule.
/// </summary>
public string RuleDescription { get; set; }
/// <summary>
/// The integer magnitude of the rule, if applicable.
/// </summary>
public int? RuleInt { get; set; }
/// <summary>
/// The boolean sign associated with the rule, if applicable.
/// </summary>
public bool? RuleBool { get; set; }
/// <summary>
/// The enum flag associated with the rule, if applicable. CAN be null.
/// </summary>
public System.Enum RuleFlagEnum { get; set; }
/// <summary>
/// A dumping ground for any other random crap I've failed to account for at this point in time.
/// </summary>
public object RuleObject { get; set; }
}
RuleType - это конкретное перечисление, например:
public enum RuleType
{
Invalid,
ModifyDifficulty,
StrengthChange,
ColorChange,
SignChange
}
Используя Json.NET, он отлично сериализует и десериализует.
RuleEnum, однако, доставляет мне проблемы. Использует ли сериализация перечисления по умолчанию или сериализацию перечисления строк, конкретный тип перечисления не предоставляется. Таким образом, во время десериализации я остаюсь сSystem.Enum
и строковое значение, которое совершенно бесполезно.
Это пример сериализации, чтобы показать, о чем я говорю:
{
"RuleType": "SignChange",
"RuleDescription": "Strength 1 Inversion Gate",
"RuleInt": 1,
"RuleFlagEnum": "Negative"
}
RuleFlagEnum, в данном случае, ссылается на перечисление:
public enum SignChange
{
Zero,
Positive,
Negative
}
Я пытался использовать всеTypeNameHandling
варианты внутри Json.NET. Они только помещают подсказки типа на объекты, что не помогает с RuleFlagEnum, так как это технически примитив.
Я бы очень хотел сохранить перечисление в System.Enum, чтобы мы могли загрузить любое произвольное перечисление для последующей интерпретации по типу правила, чтобы все это было более расширяемым. Это возможно?