Десериализовать определенный 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, чтобы мы могли загрузить любое произвольное перечисление для последующей интерпретации по типу правила, чтобы все это было более расширяемым. Это возможно?

Ответы на вопрос(1)

Ваш ответ на вопрос