你能帮我把下面的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])反序列化为类型“RootObject”,因为该类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList),例如List从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。路径'',第1行,第1位。
score属性有时会保持float值,但在我的c#类中,有一个datatype int导致异常。在@Ivan Salo的评论之前,我没有注意到。将数据类型int更改为float修复了我的问题。我还使用List来反序列化@Jon Skeet在评论部分中建议的JSON。
public class DetectedLanguage
{
public string language { get; set; }
public float score { get; set; }
}
编辑完整答案:
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"
}
}