/// <inheritdoc />
        public Armor Convert(ItemDTO value, object state)
        {
            var entity = new UnknownArmor();

            this.Merge(entity, value, state);
            return(entity);
        }
 // Implement this method in a buddy class to set properties that are specific to 'UnknownArmor' (if any)
 partial void Merge(UnknownArmor entity, ItemDTO dto, object state);
        /// <inheritdoc />
        public Armor Convert(ItemDataContract value, object state)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value", "Precondition: value != null");
            }

            Armor armor;
            var   armorDataContract = value.Armor;
            IConverter <ArmorDataContract, Armor> converter;

            if (armorDataContract != null && this.typeConverters.TryGetValue(armorDataContract.Type, out converter))
            {
                armor = converter.Convert(armorDataContract, state);
            }
            else
            {
                armor = new UnknownArmor();
            }

            int defaultSkinId;

            if (int.TryParse(value.DefaultSkin, out defaultSkinId))
            {
                armor.DefaultSkinId = defaultSkinId;
            }

            if (armorDataContract == null)
            {
                return(armor);
            }

            armor.WeightClass = this.converterForWeightClass.Convert(armorDataContract.WeightClass, state);
            int defense;

            if (int.TryParse(armorDataContract.Defense, out defense))
            {
                armor.Defense = defense;
            }

            var infusionSlotDataContracts = armorDataContract.InfusionSlots;

            if (infusionSlotDataContracts != null)
            {
                armor.InfusionSlots = this.converterForInfusionSlotCollection.Convert(infusionSlotDataContracts, state);
            }

            var infixUpgradeDataContract = armorDataContract.InfixUpgrade;

            if (infixUpgradeDataContract != null)
            {
                armor.InfixUpgrade = this.converterForInfixUpgrade.Convert(infixUpgradeDataContract, state);
            }

            int suffixItemId;

            if (int.TryParse(armorDataContract.SuffixItemId, out suffixItemId))
            {
                armor.SecondarySuffixItemId = suffixItemId;
            }

            int secondarySuffixItemId;

            if (int.TryParse(armorDataContract.SecondarySuffixItemId, out secondarySuffixItemId))
            {
                armor.SecondarySuffixItemId = secondarySuffixItemId;
            }

            return(armor);
        }