{ "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0": { "доллар США": 0,889768 } }

Выше это то, что я получаю от api монетного геккона, я считаю, что это словарь объекта, который имеет переменную с именем «usd» десятичного типа ??

Вот как выглядит мой код для попытки извлечь данные

    public class dm_Testing
    {
        public decimal usd { get; set; }
    }

    public class dm_Return_MaticPrice
    {
        public Dictionary<string, dm_Testing> MaticUSD { get; set; } 
            = new Dictionary<string, dm_Testing>();
    }

Это то, что я использую в процессе

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_url_MaticPrice);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

//Converting to correct object from json string
string nVal = new StreamReader(response.GetResponseStream()).ReadToEnd();

dm_Return_MaticPrice nTesting = new dm_Return_MaticPrice();
nTesting = JsonConvert.DeserializeObject<dm_Return_MaticPrice>(nVal);

Как бы приложение не ломалось, просто дайте мне 0, а не значение «usd», возвращаемое из API. Любое понимание того, как правильно анализировать эти данные в моей модели с помощью С#?

-1
Xskode Media 30 Май 2023 в 20:06
Укажите также значение _url_MaticPrice.
 – 
Odrai
30 Май 2023 в 20:12
При вставке JSON сюда: json2csharp.com код выглядит иначе, чем ваш. (есть и другие онлайн-конвертеры, это только тот, который я попробовал сегодня)
 – 
Luuk
30 Май 2023 в 20:17
1
Кроме того: скопируйте JSON (строку), откройте Visual Studio, создайте новый (фиктивный) класс, нажмите «Изменить» (панель инструментов), нажмите «Специальная вставка» и «Вставить JSON как классы». Он генерирует классы C# на основе заданного JSON.
 – 
Odrai
30 Май 2023 в 20:21
Это URL-адрес вызова API
 – 
Xskode Media
30 Май 2023 в 20:36

2 ответа

Другой онлайн-конвертер (https://app.quicktype.io/) сделал почти то же самое:

namespace Stackoverflow
{
    using System;
    using System.Collections.Generic;

    using System.Text.Json;
    using System.Text.Json.Serialization;
    using System.Globalization;

    public partial class Rates
    {
        [JsonPropertyName("0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0")]
        public The0X7D1Afa7B718Fb893Db30A3Abc0Cfc608Aacfebb0 The0X7D1Afa7B718Fb893Db30A3Abc0Cfc608Aacfebb0 { get; set; }
    }

    public partial class The0X7D1Afa7B718Fb893Db30A3Abc0Cfc608Aacfebb0
    {
        [JsonPropertyName("usd")]
        public double Usd { get; set; }
    }
}

И я знал, что это где-то в Visual Studio, но никак не могу вспомнить где, но @Odrai напомнил нам:

Кроме того: скопируйте JSON (строку), откройте Visual Studio, создайте новый (фиктивный) класс, нажмите «Изменить» (панель инструментов), нажмите «Специальная вставка» и «Вставить JSON как классы». Он генерирует класс C# на основе заданного JSON.

0
Luuk 30 Май 2023 в 20:24
Хорошо, я собираюсь попробовать это
 – 
Xskode Media
30 Май 2023 в 20:39

Если вы используете Newtonsoft.Json, вы можете извлечь значение usd одной строкой.

var str = "{ \"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0\": { \"usd\": 0.889768 } }";
decimal? usd = JObject.Parse(str)?.First?.First["usd"]?.Value<decimal>();
0
Ibrahim Hamaty 30 Май 2023 в 21:27