private static List <string> GetValueList(AgencyList list, string key, string dependsOn = null)
        {
            if (string.IsNullOrWhiteSpace(dependsOn))
            {
                dependsOn = null;
            }

            if (dependsOn != null && (list == null || list.DependsOn == null || dependsOn != string.Join("|", list.DependsOn)))
            {
                return(new List <string>());
            }

            return(list != null && list.Values != null && list.Values.ContainsKey(key) ? list.Values[key] : new List <string>());
        }
        private static AgencyList ParseAgencyList(JToken jToken)
        {
            AgencyList list = new AgencyList
            {
                Values = new Dictionary <string, List <string> >()
            };

            if (jToken is JValue)
            {
                list.Values["All"] = new List <string> {
                    jToken.ToString()
                };
            }
            else if (jToken is JArray)
            {
                list.Values["All"] = new List <string>();
                foreach (JValue jArrayItem in (JArray)jToken)
                {
                    list.Values["All"].Add(jArrayItem.ToString());
                }
            }
            else if (jToken is JObject)
            {
                foreach (KeyValuePair <string, JToken> kvp in (JObject)jToken)
                {
                    if (kvp.Key.Equals("depends_on", StringComparison.InvariantCultureIgnoreCase))
                    {
                        list.DependsOn = new List <string>();
                        if (kvp.Value is JValue)
                        {
                            list.DependsOn.Add(kvp.Value.ToString());
                        }
                        else if (kvp.Value is JArray)
                        {
                            foreach (JValue jArrayItem in (JArray)kvp.Value)
                            {
                                list.DependsOn.Add(jArrayItem.ToString());
                            }
                        }
                        else
                        {
                        }
                    }
                    else if (kvp.Key.Equals("values", StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (kvp.Value is JObject)
                        {
                            foreach (KeyValuePair <string, JToken> kvp2 in (JObject)kvp.Value)
                            {
                                list.Values[kvp2.Key] = new List <string>();
                                if (kvp2.Value is JValue)
                                {
                                    list.Values[kvp2.Key].Add(kvp2.Value.ToString());
                                }
                                else if (kvp2.Value is JArray)
                                {
                                    foreach (JValue jValue in (JArray)(kvp2.Value))
                                    {
                                        list.Values[kvp2.Key].Add(jValue.ToString());
                                    }
                                }
                                else
                                {
                                }
                            }
                        }
                        else if (kvp.Value is JArray)
                        {
                            foreach (JObject jArrayItem in (JArray)kvp.Value)
                            {
                                foreach (KeyValuePair <string, JToken> kvp2 in jArrayItem)
                                {
                                    if (kvp2.Value is JValue)
                                    {
                                        list.Values[kvp2.Key] = new List <string> {
                                            kvp2.Value.ToString()
                                        };
                                    }
                                    else
                                    {
                                    }
                                }
                            }
                        }
                        else
                        {
                        }
                    }
                    else
                    {
                    }
                }
            }
            else
            {
            }

            return(list);
        }