C# 无法强制转换类型为';系统对象[]和#x27;输入我的C类#
我正在从我的一个API中获取用于语言转换的数据 这是我的问题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"}]}] 现在我想转换列表中的数据 所以我根据我的数据创
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。