You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:45:30