无法转换类型为“ System.Object []”的对象来键入我的类C#

时间:2019-01-28 06:31:30

标签: c# asp.net-web-api json.net

我正在从一种API中获取数据以进行语言转换

这是我的查询

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

以下是我的示例数据

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

现在我要转换列表中的数据

所以我根据数据创建了一个类

    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 :(得分:1)

首先,您不应该从任何正常意义上进行此操作ReadAsStringAsync().Result;您正在混合async和同步代码

第二,您的json与以下内容不匹配

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

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

应该是

public detectedLanguage detectedLanguage { get; set; }

它是一个json对象而不是列表

答案 1 :(得分:1)

您可以使用以下网站从JSON生成类-Here

在您的情况下,班级将是-

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);