Desserializar enum específico em system.enum no Json.Net

Eu tenho uma classe 'regra' bastante genérica que estou usando para controlar o comportamento de um mecanismo de análise que estou escrevendo:

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 é uma enumeração específica, assim:

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

Usando Json.NET, que serializa e desserializa muito bem.

RuleEnum, no entanto, está me dando problemas. Seja usando a serialização de enum padrão ou a serialização de enum de seqüência de caracteres, o tipo específico de enum não é fornecido. Como tal, durante a desserialização, fiquei comSystem.Enum e um valor de sequência, que é totalmente inútil.

Este é um exemplo da serialização, para mostrar do que estou falando:

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

RuleFlagEnum, neste caso, está se referindo à enumeração:

public enum SignChange
{
    Zero,
    Positive,
    Negative
}

Eu tentei usar todos osTypeNameHandling opções dentro do Json.NET. Eles apenas colocam dicas de tipo nos objetos, o que não ajuda no RuleFlagEnum, pois é tecnicamente um primitivo.

Eu realmente gostaria de manter a enumeração em System.Enum para que possamos carregar qualquer enumeração arbitrária para posterior interpretação pelo tipo de regra, para que tudo seja mais expansível. Isso é possível?

questionAnswers(1)

yourAnswerToTheQuestion