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

Posted

技术标签:

【中文标题】无法将“System.Object []”类型的对象转换为我的类 C#【英文标题】:Unable to cast object of type 'System.Object[]' to type my class C# 【发布时间】:2019-06-21 03:18:54 【问题描述】:

我正在从我的一个 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'.

可以做些什么来解决这个问题?

【问题讨论】:

你根本没有使用json.net,你使用的是javascriptserializer。你的意思是使用哪个? detectedLanguage 可以不止一个吗? 不会有 【参考方案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);

【讨论】:

我在替换您的代码时收到此错误,无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“Avalon.RootObject”,因为该类型需要 JSON 对象(例如 "name":"value") 以正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 "name":"value")或将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如 List 可以从 JSON 数组反序列化。 JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组反序列化。第 1 行,位置 1。【参考方案2】:

首先,您不应该在任何正常意义上这样做ReadAsStringAsync().Result;。您正在混合async 和同步代码。

其次,您的 json 与以下内容不匹配

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

public List<detectedLanguage> detectedLanguage  get; set; 

应该是

public detectedLanguage detectedLanguage  get; set; 

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

【讨论】:

以上是关于无法将“System.Object []”类型的对象转换为我的类 C#的主要内容,如果未能解决你的问题,请参考以下文章

无法将对象类型“System.Web.Mvc.HtmlHelper` 1 [System.Object]”转换为“System.Web.Mvc.HtmlHelper”

无法将System.Object []转换为类型{System.String,System.Management.Automation.ScriptBlock}

无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

Protobuf 无法序列化 system.object

无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S