public static ItemModel GetItemModelFromCatalogItem(string itemId, string itemClass, string displayName, string description,
                                                            string customData, IJsonParser jsonParser)
        {
            ItemModel itemModel = null;

            PlayFabItemClass playFabItemClass = (PlayFabItemClass)Enum.Parse(typeof(PlayFabItemClass), itemClass);

            switch (playFabItemClass)
            {
            case PlayFabItemClass.Ability: itemModel = parseAbilityItemModel(customData, jsonParser); break;

            case PlayFabItemClass.Equipment: itemModel = parseEquipmentItemModel(customData, jsonParser); break;
            }

            if (itemModel != null)
            {
                itemModel.ID          = int.Parse(itemId);
                itemModel.Name        = displayName;
                itemModel.Description = description;
                ItemModelRaw itemModelRaw = jsonParser.DeserializeObject <ItemModelRaw>(customData);
                itemModelRaw.ApplyToItemModel(itemModel);
            }

            return(itemModel);
        }
        private static ItemModel parseEquipmentItemModel(string customData, IJsonParser jsonParser)
        {
            EquipmentItemModel    equipmentItemModel    = new EquipmentItemModel();
            EquipmentItemModelRaw equipmentItemModelRaw = jsonParser.DeserializeObject <EquipmentItemModelRaw>(customData);

            equipmentItemModelRaw.ApplyToEquipmentItemModel(equipmentItemModel);
            return(equipmentItemModel);
        }
        private static AbilityItemModel parseAbilityItemModel(string customData, IJsonParser jsonParser)
        {
            AbilityItemModel    abilityItemModel    = new AbilityItemModel();
            AbilityItemModelRaw abilityItemModelRaw = jsonParser.DeserializeObject <AbilityItemModelRaw>(customData);

            abilityItemModelRaw.ApplyToAbilityItemModel(abilityItemModel, jsonParser);
            return(abilityItemModel);
        }
        public void ApplyToAbilityItemModel(AbilityItemModel abilityItemModel, IJsonParser jsonParser)
        {
            abilityItemModel.AbilityEffectType   = (AbilityEffectType)int.Parse(AbilityEffectType);
            abilityItemModel.AbilityTargetType   = (AbilityTargetType)int.Parse(AbilityTargetType);
            abilityItemModel.AbilityDurationType = (AbilityDurationType)int.Parse(AbilityDurationType);
            abilityItemModel.CastTurns           = int.Parse(CastTurns);
            abilityItemModel.CoolDownTurns       = int.Parse(CoolDownTurns);
            abilityItemModel.ImmediateAmout      = int.Parse(ImmediateAmout);
            abilityItemModel.IsSpellBased        = int.Parse(IsSpellBased) == 1;

            AbilityDurationDataRaw abilityDurationDataRaw = string.IsNullOrEmpty(AbilityDurationData) ? null :
                                                            jsonParser.DeserializeObject <AbilityDurationDataRaw>(AbilityDurationData);

            if (abilityDurationDataRaw != null)
            {
                abilityItemModel.AbilityDurationData = new AbilityDurationData();
                abilityDurationDataRaw.ApplyToDurationData(abilityItemModel.AbilityDurationData, abilityItemModel);
            }
        }