Nano Hash - криптовалюты, майнинг, программирование

C # - Невозможно десериализовать текущий массив JSON

У меня есть такой код:

string json2 = vc.Request(model.uri + "?fields=uri,transcode.status", "GET");
var deserial = JsonConvert.DeserializeObject<Dictionary<string, object>>(json2);
var transcode = deserial["transcode"];
var serial = JsonConvert.SerializeObject(transcode);
var deserial2 = JsonConvert.DeserializeObject<Dictionary<string, object>>(serial);
var upstatus = deserial2["status"].ToString();

JSON, который я получаю с сервера:

{
    "uri": "/videos/262240241",
    "transcode": {
        "status": "in_progress"
    }
}

При запуске на VS2017 работает.

Но на VS2010 я получаю следующую ошибку:

Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'System.Collections.Generic.Dictionary`2 [System.String, System.Object]', поскольку для этого типа требуется объект JSON (например, {"name ":" value "}) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, реализующий интерфейс коллекции (например, ICollection, IList), например List, который может десериализоваться из массива JSON. JsonArrayAttribute также можно добавить к типу, чтобы заставить его десериализоваться из массива JSON. Путь '', строка 1, позиция 1.

Я использую Newtonsoft.Json.

Любая идея?

29.03.2018

  • Ответ прост. используйте специальное прошлое Visual Studio json для создания объекта десериализации. 29.03.2018
  • Я задал вопрос ниже, но: являются ли версии фреймворка, которые вы используете, одинаковыми в проектах VS2017 и VS2010? Версия JSON.Net такая же? 29.03.2018

Ответы:


1

Полученные вами данные json не являются Dictionary<string, object>, это объект

public class Transcode
{
    public string status { get; set; }
}

public class VModel
{
    public string uri { get; set; }
    public Transcode transcode { get; set; }
}

Вы можете использовать этот объект:

var deserial = JsonConvert.DeserializeObject<VModel>(json2);

вместо того:

var deserial = JsonConvert.DeserializeObject<Dictionary<string, object>>(json2);
29.03.2018
  • Предоставленный json также является допустимой строкой Dictionary ‹, object› 29.03.2018
  • @AaYy Используемые вами версии фреймворка в проектах VS2017 и VS2010 одинаковы? Версия JSON.Net такая же? 29.03.2018

  • 2

    Лучший ответ по какой-то причине был удален, поэтому опубликую его:

    var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
    string upstatus = string.Empty;
    upstatus = deserial.transcode.status.ToString();
    
    29.03.2018

    3

    Если ваша модель не очень хорошо определена или она динамическая, используйте:

    var deserial = JsonConvert.DeserializeObject<dynamic>(json2);
    

    или вы можете попробовать использовать:

    JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json2);
    
    29.03.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..