Deserialice una enumeración específica en system.enum en Json.Net

Tengo una clase de 'regla' bastante genérica que estoy usando para conducir el comportamiento de un motor de análisis que estoy escribiendo:

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 es una enumeración específica, así:

public enum RuleType
{
    Invalid,
    ModifyDifficulty,
    StrengthChange,
    ColorChange,
    SignChange
}

Usando Json.NET, eso serializa y deserializa muy bien.

RuleEnum, sin embargo, me está dando problemas. Ya sea que use la serialización enum predeterminada o la serialización enum de cadena, no se proporciona el tipo específico de enum. Como tal, durante la deserialización, me quedo conSystem.Enum y un valor de cadena, que es totalmente inútil.

Este es un ejemplo de la serialización, para mostrar de lo que estoy hablando:

{
   "RuleType": "SignChange",
   "RuleDescription": "Strength 1 Inversion Gate",
   "RuleInt": 1,
   "RuleFlagEnum": "Negative"
}

RuleFlagEnum, en este caso, se refiere a la enumeración:

public enum SignChange
{
    Zero,
    Positive,
    Negative
}

He intentado usar todos losTypeNameHandling opciones dentro de Json.NET. Solo ponen sugerencias de tipo sobre los objetos, lo que no ayuda con RuleFlagEnum, ya que técnicamente es una primitiva.

Realmente me gustaría mantener la enumeración en System.Enum para que podamos cargar cualquier enumeración arbitraria para su posterior interpretación por el tipo de regla, para que todo sea más ampliable. es posible?

Respuestas a la pregunta(1)

Su respuesta a la pregunta