C# 无法强制转换类型为';系统对象[]和#x27;输入我的C类#

C# 无法强制转换类型为';系统对象[]和#x27;输入我的C类#,c#,asp.net-web-api,json.net,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"}]}] 现在我想转换列表中的数据 所以我根据我的数据创

我正在从我的一个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; }
    }
但我得到的错误如下

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'.
"detectedLanguage":{  
     "language":"en",
     "score":1.0
 },

如何解决此问题?

首先,您不应该在任何正常意义下执行此操作
ReadAsStringAsync()。您正在混合
异步
和同步代码

其次,您的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'.
"detectedLanguage":{  
     "language":"en",
     "score":1.0
 },


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

您可以使用此网站从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);
公共类检测语言
{
公共字符串语言{get;set;}
公共双倍分数{get;set;}
}
公共课翻译
{
公共字符串文本{get;set;}
{get;set;}的公共字符串
}
公共类根对象
{
公共检测语言检测语言{get;set;}
公共列表翻译{get;set;}
}
要反序列化的代码将为-

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);
var data=JsonConvert.DeserializeObject(jsonString);

您根本没有使用,您正在使用。您打算使用哪种语言?是否可以有多个
detectedLanguage
?不,当我替换您的代码时不会出现此错误,无法将当前JSON数组(例如[1,2,3])反序列化为类型“Avalon.RootObject”,因为该类型需要一个JSON对象(例如,{“name”:“value”})才能正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”}),或将反序列化类型更改为数组或实现可从JSON数组反序列化的集合接口(例如ICollection、IList)类似列表的类型。还可以将JsonArrayAttribute添加到类型中,以强制它从JSON数组反序列化。第1行,位置1。