请帮助我将以下JSON反序列化为c#。
[
{
"detectedLanguage": {
"language": "en",
"score": 10.0
},
"translations": [
{
"text": "",
"to": "da"
},
{
"text": "",
"to": "da"
}
]
}
]
我已使用以下c#类进行反序列化,但遇到了异常。
public class DetectedLanguage
{
public string language { get; set; }
public int 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 response = client.SendAsync(request).Result;
var jsonResponse = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<RootObject>(jsonResponse);
例外
无法将当前JSON数组(例如[1,2,3])反序列化为type 'RootObject',因为类型需要JSON对象(例如 {“ name”:“ value”})正确反序列化。要解决此错误,请 将JSON更改为JSON对象(例如{“ name”:“ value”})或更改 将反序列化类型转换为数组或实现集合的类型 接口(例如ICollection,IList),例如List 从JSON数组反序列化。也可以添加JsonArrayAttribute 类型,以强制其从JSON数组反序列化。路径'', 第1行,位置1。
答案 0 :(得分:0)
得分属性有时保持浮点值,但是在我的C#类中,存在数据类型 int 会导致异常。在 @Ivan Salo 发表评论之前,我没有注意到。将数据类型 int 更改为 float 可以解决我的问题。我还使用List反序列化了@Jon Skeet在注释部分中建议的JSON。
public class DetectedLanguage
{
public string language { get; set; }
public float score { get; set; }
}
答案 1 :(得分:-3)
编辑为完整答案:
using Newtonsoft.Json;
class Program
{
public partial class RootObject
{
[JsonProperty("detectedLanguage")]
public DetectedLanguage DetectedLanguage { get; set; }
[JsonProperty("translations")]
public Translation[] Translations { get; set; }
}
public partial class DetectedLanguage
{
[JsonProperty("language")]
public string Language { get; set; }
[JsonProperty("score")]
public long Score { get; set; }
}
public partial class Translation
{
[JsonProperty("text")]
public string Text { get; set; }
[JsonProperty("to")]
public string To { get; set; }
}
public partial class RootObject
{
public static RootObject[] FromJson(string jsonresponse) => JsonConvert.DeserializeObject<RootObject[]>(jsonresponse);
}
static void Main(string[] args)
{
var response = client.SendAsync(request).Result;
var jsonResponse = response.Content.ReadAsStringAsync().Result;
var result = RootObject.FromJson(jsonResponse);
System.Console.WriteLine(result[0].DetectedLanguage.Language); //outputs "en"
}
}