/// <summary> /// Метод производит десериализацию JSON и в случае успеха записывает результат в выходной параметр. /// </summary> /// <param name="jObject">Исходный JSON</param> /// <param name="valutes">Список валют, выходной параметр.</param> /// <returns></returns> private bool TryParseValutes(JObject jObject, out Valutes valutes) { valutes = new Valutes(); try { foreach (var child in jObject.Children()) { if (string.Equals("Valute", child.Path)) { int i = 0; foreach (var valute in child.Value <JToken>().Children().First().Children()) { var anotherChild = valute.Children().ElementAt(i); var id = anotherChild.ElementAt((int)ValuteComponents.Id).ToArray()[0].ToString(); var numCode = anotherChild.ElementAt((int)ValuteComponents.NumCode).ToArray()[0].ToString(); var charCode = anotherChild.ElementAt((int)ValuteComponents.CharCode).ToArray()[0].ToString(); var nom = anotherChild.ElementAt((int)ValuteComponents.Nominal).ToArray()[0].ToString(); var name = anotherChild.ElementAt((int)ValuteComponents.Name).ToArray()[0].ToString(); var val = anotherChild.ElementAt((int)ValuteComponents.Value).ToArray()[0].ToString(); var prev = anotherChild.ElementAt((int)ValuteComponents.Previous).ToArray()[0].ToString(); Valute result = new Valute ( id, numCode, charCode, int.TryParse(nom, out int nominal) ? nominal : 0, name, double.TryParse(val, out double recValue) ? recValue : 0.0, double.TryParse(prev, out double prevValue) ? prevValue : 0.0 ); valutes.AddValute(result); } } } if (valutes.Count() != 0) { valutes.AddValute( new Valute ( string.Empty, string.Empty, "RUB", 1, "Российский рубль", 1.0, 1.0 ) ); } return(true); } catch { return(false); } }
/// <summary> /// При переходе на страницу калькулятора полученный JSON десериализуется в коллекцию объектов класса Valute. /// </summary> /// <param name="e"></param> protected override void OnNavigatedTo(NavigationEventArgs e) { this.Width = 1500; this.Height = 1000; if (e.Parameter != null) { Text = e.Parameter.ToString(); JObject jsonDe = JsonConvert.DeserializeObject <JObject>(Text); Valutes = TryParseValutes(jsonDe, out Valutes temp) ? temp : null; if (Valutes != null) { LeftValuteBlock.Text = "RUB"; RightValuteBlock.Text = Valutes.Find(elem => elem.CharCode == "USD").CharCode; } else { ErrorBlock.Visibility = Visibility.Visible; LeftValuteBlock.Text = RightValuteBlock.Text = string.Empty; LeftButtonChange.Visibility = RightButtonChange.Visibility = Visibility.Collapsed; LeftBlock.Visibility = RightBlock.Visibility = Visibility.Collapsed; return; } } }