Невозможно привести объект типа 'System.Object []' для ввода моего класса C # - PullRequest
0 голосов
/ 28 января 2019

Я получаю данные от одного из моих API для преобразования языка

вот мой запрос

var jsonResponse = response.Content.ReadAsStringAsync().Result;

ниже приведены мои примеры данных

[{"detectedLanguage":{"language":"en","score":1.0},"translations":[{"text":"All","to":"en"},{"text":"सभी","to":"hi"}]}]

теперь я хочу преобразовать данные в List

, поэтому я создал некоторый класс согласно моим данным

    public class translations
    {
        public string text { get; set; }
        public string to { get; set; }
    }

    public class detectedLanguage
    {
        public string language { get; set; }
        public float score { get; set; }
    }

    public class TranslatedString
    {
        public List<detectedLanguage> detectedLanguage { get; set; }
        public List<translations> translations { get; set; }
    }

и использую newtonsoft.Json для преобразования этих данных в список, как показано ниже

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
TranslatedString routes_list = (TranslatedString)json_serializer.DeserializeObject(jsonResponse);

но я получаю сообщение об ошибке, подобное следующему

Unable to cast object of type 'System.Object[]' to type 'Avalon.TranslatedString'.

, что можно сделать, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы можете создавать классы из JSON, используя этот веб-сайт - Здесь

В вашем случае классы будут -

public class DetectedLanguage
{
    public string language { get; set; }
    public double score { get; set; }
}

public class Translation
{
    public string text { get; set; }
    public string to { get; set; }
}

public class RootObject
{
    public DetectedLanguage detectedLanguage { get; set; }
    public List<Translation> translations { get; set; }
}

, а код для десериализации будет -

var data = JsonConvert.DeserializeObject<List<RootObject>>(jsonString);
0 голосов
/ 28 января 2019

Во-первых, вы не должны делать это в обычном смысле ReadAsStringAsync().Result; Вы смешиваете async и синхронный код

Во-вторых, ваш json не соответствует следующему

"detectedLanguage":{  
     "language":"en",
     "score":1.0
 },

и

public List<detectedLanguage> detectedLanguage { get; set; }

Это должно быть

public detectedLanguage detectedLanguage { get; set; }

Это объект json, а не список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...