c# - 将 JSON 反序列化为引发异常的 c# 对象
问题描述
您能否帮我将以下 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),例如可以从 JSON 数组反序列化。JsonArrayAttribute 也可以添加到类型中以强制它从 JSON 数组中反序列化。路径'',第 1 行,位置 1。
解决方案
score属性有时包含浮点值,但在我的 c# 类中,存在导致异常的数据类型int 。在@Ivan Salo发表评论之前我没有注意到。将数据类型int更改为float解决了我的问题。我还使用 List 反序列化 @Jon Skeet 在评论部分建议的 JSON。
public class DetectedLanguage
{
public string language { get; set; }
public float score { get; set; }
}
推荐阅读
- javascript - 有没有办法防止回发?
- c# - DateTime 列的列表对象上的时间问题
- firebase - Flutter Firebase - 如何将用户 uid 添加到文档
- ocaml - 使用 ocaml OUnit2 assert_raise
- verilog - 可变模块安装
- unit-testing - vertx 单元测试未执行,超时异常
- linux - 有没有更好的方法来读取和附加 bash 脚本中的文件
- python - 如何摆脱 pygame 上的图形伪影?
- scala - 如何为我的无标记代数编写单元测试?
- c# - 如何在 UWP 应用中的主窗口和 AppWindow 之间传输信息?