JSON反序列化为C#对象抛出异常,请求技术协助
解决JSON反序列化到C#对象的异常问题
咱们来一步步拆解并解决这个反序列化的问题哈,先从你抛出的异常和代码细节入手:
核心问题分析
1. JSON结构与反序列化类型不匹配
你提供的JSON最外层是数组(用[]包裹),但代码里却试图把它反序列化成单个RootObject对象——框架没法把数组直接转成单个对象,这就是抛出异常的直接原因。
2. 隐藏的数据类型不匹配
还有个容易忽略的问题:JSON里的score值是10.0(浮点数类型),但你C#类里定义的score是int(整数类型)。就算解决了数组的问题,这一步也会触发类型转换异常,得一起修复。
修复方案
第一步:调整C#类的类型定义
把DetectedLanguage中的score类型从int改为double(如果需要更高精度也可以用decimal):
public class DetectedLanguage { public string language { get; set; } public double score { get; set; } // 适配JSON中的浮点数类型 } 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; } }
第二步:修改反序列化的目标类型
因为JSON是数组结构,所以要把反序列化的目标类型改成List<RootObject>:
var response = client.SendAsync(request).Result; var jsonResponse = response.Content.ReadAsStringAsync().Result; // 将单个RootObject改为List<RootObject>匹配JSON数组 var result = JsonConvert.DeserializeObject<List<RootObject>>(jsonResponse);
修改完成后,你就可以通过result[0]来访问数组中的第一个元素,获取对应的检测语言和翻译内容啦。
内容的提问来源于stack exchange,提问作者Simant
相关产品推荐
相关产品推荐

