无法将“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首先,您不应该在任何正常意义上这样做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 基元或枚举类型。
无法创建“System.Object”类型的常量值。此上下文仅支持基元类型或枚举类型
无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“System.Collections.Generic.Dictionary`2[System.String,S