public void ParseJSON(JSONNode json)
    {
        Identity      = json["identity"].AsDecodedURL();
        MinCount      = json["min-count"].AsInt;
        MaxCount      = json["max-count"].AsInt;
        RequireAwoken = json["awoken"].AsBool;
        Quality       = json["quality"].AsEnum <HeroQuality>();

        ItemsGuaranteed = new RetireRewardDictionary();
        ItemsRandom     = new RetireRewardDictionary();
        Types           = new List <HeroType>();

        //Parse the Key-Value pairs in the Guaranteed & Random items:
        var guaranteedItems = JSONManager.SplitKVFloats(json["guaranteed-items"]);
        var randomItems     = JSONManager.SplitKVFloats(json["random-items"]);

        foreach (var kv in guaranteedItems)
        {
            ItemsGuaranteed.Add(kv.Key, kv.Value);
        }
        foreach (var kv in randomItems)
        {
            ItemsRandom.Add(kv.Key, kv.Value);
        }

        //Validate this entry...
        if (MinCount > MaxCount)
        {
            JSONError("MinCount > MaxCount, should probably swap these in RetireRewards table.");
        }
        if (ItemsGuaranteed.Count == 0 && ItemsRandom.Count == 0)
        {
            JSONError("RetireReward doesn't have any Guaranteed -or- Random items!");
        }

        //Tracer.trace(Debug());
    }