Deserialisieren Sie eine bestimmte Aufzählung in system.enum in Json.Net

Ich habe eine ziemlich allgemeine Regelklasse, die ich verwende, um das Verhalten einer Analyse-Engine zu steuern, die ich schreibe:

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 ist eine bestimmte Aufzählung, wie folgt:

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

Verwenden Sie Json.NET, um alle Daten zu serialisieren und zu deserialisieren.

RuleEnum gibt mir jedoch Probleme. Unabhängig davon, ob Sie die Standard-Enumerationsserialisierung oder die String-Enumerationsserialisierung verwenden, wird der bestimmte Aufzählungstyp nicht bereitgestellt. Während der Deserialisierung verbleibe ich mitSystem.Enum und ein String-Wert, der überhaupt nicht hilfreich ist.

Dies ist ein Beispiel für die Serialisierung, um zu zeigen, wovon ich spreche:

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

RuleFlagEnum bezieht sich in diesem Fall auf die Aufzählung:

public enum SignChange
{
    Zero,
    Positive,
    Negative
}

Ich habe versucht, alleTypeNameHandling -Optionen in Json.NET. Sie platzieren nur Typhinweise auf den Objekten, was bei RuleFlagEnum nicht hilft, da es technisch gesehen ein Primitiv ist.

Ich würde wirklich, wirklich gerne die Enumeration bei System.Enum behalten, damit wir jede beliebige Enumeration für die spätere Interpretation durch den Regeltyp laden können, sodass das Ganze besser erweiterbar ist. Ist das möglich

Antworten auf die Frage(2)

Ihre Antwort auf die Frage