/// <summary> /// Internal method to filter pokemon description from pokemon API result /// </summary> /// <param name="pokemonData">pokemon details</param> /// <returns></returns> public async Task <string> ReadPokemonDescription(string pokemonData, string readInLanguage = "en") { string description = string.Empty; if (string.IsNullOrEmpty(pokemonData) || pokemonData.ToLower().Contains("not found")) { throw new ArgumentException("Invalid Pokemon Name"); } var dataSet = new JObject(JObject.Parse(pokemonData)); var filteredSettings = dataSet.SelectTokens("$.id"); if (filteredSettings != null && filteredSettings.Count() > 0) { var id = filteredSettings.FirstOrDefault().ToString(); var pokemonDescription = await _pokemonRepository.GetPokemonDescription(id); var descriptionDataSet = new JObject(JObject.Parse(pokemonDescription)); var flavor_text_entries = descriptionDataSet.SelectTokens("$.flavor_text_entries").Children().ToList(); if (flavor_text_entries != null && flavor_text_entries.Count() > 0) { for (int i = 0; i < flavor_text_entries.Count(); i++) { var flavor_text_entriesDataSet = new JObject(JObject.Parse(flavor_text_entries[i].ToString())); if (flavor_text_entriesDataSet.SelectTokens("$.language.name").FirstOrDefault().ToString().ToLower() == readInLanguage) { description += flavor_text_entriesDataSet.SelectTokens("$.flavor_text").FirstOrDefault().ToString(); } } } } return(description.Replace("\n", string.Empty)); }