private static string GetFirstListValue(string consumerClass, AgencyObject obj, Func <AgencyRateStructure, AgencyList> fnGetList, string key, string dependsOn = null)
        {
            AgencyRateStructure rateStructure = GetRateStructure(obj, consumerClass);

            return(rateStructure != null
                ? GetValueList(fnGetList(rateStructure), key, dependsOn).FirstOrDefault()
                : null);
        }
        private static string GetCommaDelimitedListValue(string consumerClass, AgencyObject obj, Func <AgencyRateStructure, AgencyList> fnGetList, string key, string dependsOn = null)
        {
            AgencyRateStructure rateStructure = GetRateStructure(obj, consumerClass);

            return(rateStructure != null
                ? string.Join(", ", GetValueList(fnGetList(rateStructure), key, dependsOn))
                : null);
        }
        private static List <AgencyRateStructure> ParseRateStructure(JToken jItem)
        {
            List <AgencyRateStructure> rateStructures = new List <AgencyRateStructure>();

            foreach (KeyValuePair <string, JToken> jRateStructureParentItem in (JObject)jItem)
            {
                AgencyRateStructure rateStructure = new AgencyRateStructure {
                    ConsumerClass = jRateStructureParentItem.Key
                };
                rateStructures.Add(rateStructure);
                bool isJObject = jRateStructureParentItem.Value is JObject;
                if (!isJObject)
                {
                    continue;
                }
                foreach (KeyValuePair <string, JToken> jRateStructureItem in (JObject)jRateStructureParentItem.Value)
                {
                    if (jRateStructureItem.Key.Equals("adjusted_budget", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.AdjustedBudget = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("bill", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Bill = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("budget", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Budget = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("commodity_price", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CommodityPrice = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("days_in_period", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.DaysInPeriod = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("elevation_rate", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.ElevationRate = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("et_amount", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.EtAmount = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("fixed_water_service", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FixedWaterService = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("flat_rate", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FlatRate = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("flat_rate_commodity", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FlatRateCommodity = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("flat_rate_drought", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FlatRateDrought = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("gpcd", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Gpcd = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("hhsize", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.HhSize = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("indoor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Indoor = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("indoor_price", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.IndoorPrice = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("irrigation_efficiency", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.IrrigationEfficiency = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("mwd_ready_to_serve", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.MwdReadyToServe = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("outdoor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Outdoor = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("outside_city_service_price", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.OutsideCityServicePrice = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("rate", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.Rate = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("recycled_rate", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.RecycledRate = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("sdcwa_infrastructure", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.SdcwaInfrastructure = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("sewer_price", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.SewerPrice = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_prices", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierPrices = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_prices_commodity", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierPricesCommodity = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_prices_drought", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierPricesDrought = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_rates", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierRates = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_starts", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierStarts = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_starts_commodity", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierStartsCommodity = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("tier_starts_drought", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.TierStartsDrought = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("wrap_discount", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.WrapDiscount = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("capital_facilities_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CapitalFacilitiesCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("capital_improvements_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CapitalImprovementsCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("carw_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CarwCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("commodity_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CommodityCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("connection_fee", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.ConnectionFee = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("cost_adjustment_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.CostAdjustmentCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("elevation_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.ElevationCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("fixed_sewer_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FixedSewerCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("fixed_wastewater_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FixedWastewaterCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("flat_service_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FlatServiceCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("minimum_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.MinimumCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("outside_city_service_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.OutsideCityServiceCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("recycled_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.RecycledCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("reliability_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.ReliabilityCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("sanitation_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.SanitationCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("service_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.ServiceCharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("sewer_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.SewerCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("variable_wastewater_charge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.VariableWastewaterCharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("drought_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.DroughtSurcharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("fixed_drought_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.FixedDroughtSurcharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("safe_drinking_water_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.SafeDrinkingWaterSurcharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("utility_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.UtilitySurcharge = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("utility_surcharge_price", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.UtilitySurchargePrice = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("variable_drought_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.VariableDroughtSurcharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("wrap_surcharge", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.WrapSurcharge = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("landscape_factor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.LandscapeFactor = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("monthly_plant_factor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.MonthlyPlantFactor = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else if (jRateStructureItem.Key.Equals("volumetric_conversion_factor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.VolumetricConversionFactor = jRateStructureItem.Value.ToString();
                    }
                    else if (jRateStructureItem.Key.Equals("weather_adjustment_factor", StringComparison.InvariantCultureIgnoreCase))
                    {
                        rateStructure.WeatherAdjustmentFactor = ParseAgencyList(jRateStructureItem.Value);
                    }
                    else
                    {
                    }
                }
            }
            return(rateStructures);
        }