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?