Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2023, 14:18   #1
globalcad
Новичок
Джуниор
 
Регистрация: 14.09.2023
Сообщений: 1
По умолчанию Deserialize Json не получается

Добрый день . Создал тип для десерилизации json

public class AV_GQ_data
{
public string datatype { get; set; }
public string data { get; set; }
}

public class AV_Global_Quote
{
public string name_answer { get; set; }
public AV_GQ_data[] datas { get; set; }

}
Пытаюсь десериазовать , причем колличество может быть не 10 а 100 например
{
"Global Quote": {
"01. symbol": "IBM",
"02. open": "145.9500",
"03. high": "146.9800",
"04. low": "145.9200",
"05. price": "146.5500",
"06. volume": "2627999",
"07. latest trading day": "2023-09-13",
"08. previous close": "146.3000",
"09. change": "0.2500",
"10. change percent": "0.1709%"
}
}

Следующим образом
JsonSerializerOptions options = new JsonSerializerOptions();
options.PropertyNameCaseInsensitive = true;
var aaa= JsonSerializer.Deserialize<AV_Globa l_Quote>(client.DownloadString(quer yUri), options);

врезультате в aaa null , null . подскажите что не так может быть
globalcad вне форума Ответить с цитированием
Старый 14.09.2023, 16:25   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

В приведённом коде нет никакого сопоставления. Откуда библиотека узнает, что ключ нужно положить в datatype, а значение в data?
Простейший вариант для приведённого примера - переделать класс AV_Global_Quote, а от AV_GQ_data отказаться в пользу словаря:
Код:
    public class AV_Global_Quote
    {
        [JsonPropertyName("Global Quote")]
        public Dictionary<string, string> datas { get; set; }
    }
Тут указано, что в свойство datas будут записаны данные из "Global Quote". Словарь по умолчанию так из json читается как ключ-значение. Если кроме Global Quote возможны другие аналогичные объекты в json, то нужно добавить соответствующие свойства с атрибутом, либо и этот класс менять на словарь и работать со словарём словарей.
Если хочется именно свой тип, то тут нужно лезть в конвертеры, либо десериализовывать вручную через JsonObject.Parse и раскидывать по нужным объектам.
pu4koff вне форума Ответить с цитированием
Старый 18.09.2023, 15:03   #3
melky
Пользователь
 
Регистрация: 27.05.2018
Сообщений: 46
По умолчанию

Потому что в вашем json нет массива
melky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON (ISuperObject) как сформировать json объект Alar Общие вопросы Web 1 23.03.2022 08:52
Работа с JSON (System.JSON) nibufep Общие вопросы Delphi 3 19.04.2016 18:21
JSON Exception [org.apache.json] spectrum988 Помощь студентам 3 11.12.2015 09:25
Проблема Deserialize Fedosss C# (си шарп) 6 11.07.2012 00:37
Передача файлов. Проблема с Deserialize Sandman89 C# (си шарп) 0 17.12.2011 22:42