我正在从一种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'.
该如何解决?
答案 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);