C#中反序列化JSON数组失败,请求排查代码问题
问题分析与修正方案
核心错误点
- 类结构设计错误:单独定义
Latitud和Longitud类完全没必要,JSON的根是一个包含latitude和longitude两个数组的对象,应该用一个根类封装这两个属性;同时Device类的属性类型与JSON数据不匹配:ts在JSON中是长整型数字(1677055475800),定义成string不合适,应该用long;value是带小数的字符串,定义成int会导致转换失败,应该用string或double。
- 反序列化类型错误:你把整个JSON反序列化成
List<Longitud>和List<Latitud>,但JSON根是单个对象而非数组,类型完全不匹配。
修正后的代码
正确的类定义
// 对应整个JSON根对象 public class LocationData { // latitude是数组,类型为List<Coordinate> public List<Coordinate> latitude { get; set; } // longitude同理 public List<Coordinate> longitude { get; set; } } // 对应数组中的每个坐标元素 public class Coordinate { // ts是长整型数字,用long匹配 public long ts { get; set; } // value是带小数的字符串,用string保留原始格式,或用double转成数值 public string value { get; set; } // 如果需要数值类型,可替换为: // public double value { get; set; } }
正确的反序列化代码
JavaScriptSerializer ser = new JavaScriptSerializer(); // 反序列化成根类实例,而非列表 var locationData = ser.Deserialize<LocationData>(jsonData); // 访问第一个纬度数据 var firstLat = locationData.latitude[0]; Console.WriteLine($"纬度时间戳:{firstLat.ts},值:{firstLat.value}"); // 访问第一个经度数据 var firstLng = locationData.longitude[0]; Console.WriteLine($"经度时间戳:{firstLng.ts},值:{firstLng.value}");
内容的提问来源于stack exchange,提问作者Aismel
相关产品推荐
相关产品推荐

