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

JSON转C#类对象反序列化报错求助:Invalid array passed in

解决JSON反序列化"Invalid array passed in"异常问题

让我们一步步排查并解决你的问题:

核心问题分析

你遇到的Invalid array passed in异常,最直接的原因是反序列化的目标类型和JSON结构不匹配:

  • 你的JSON是一个单个对象(外层是{"data": {...}}),但你却尝试反序列化成List<Data>(数组/列表类型),这就会触发数组不匹配的错误。
  • 除此之外,你的类定义还有几个细节问题会导致反序列化失败或数据丢失。

修正步骤

1. 修正类定义的访问修饰符和缺失属性

类的属性需要是public才能被序列化器识别,同时要补上部分Vehicle对象存在的ignition可选属性(因为不是所有Vehicle都有这个字段,所以用可空bool类型):

public class Data 
{ 
    public JsonData data { get; set; } 
}

public class JsonData 
{ 
    public string message { get; set; } 
    public bool success { get; set; } 
    public long serverTime { get; set; } 
    public int pageNo { get; set; } 
    public int pageSize { get; set; } 
    public int totalPages { get; set; } 
    public int totalCount { get; set; } 
    // 改为public,让序列化器能访问
    public List<VehicleDetails> list { get; set; } 
}

public class VehicleDetails 
{ 
    public string vehicleNumber { get; set; } 
    public string deviceNumber { get; set; } 
    public string vendorCode { get; set; } 
    public string venndorName { get; set; } 
    public double latitude { get; set; } 
    public double longitude { get; set; } 
    public double speed { get; set; } 
    public long createdDate { get; set; } 
    public string location { get; set; } 
    public string provider { get; set; } 
    public string vehicleType { get; set; } 
    public bool accurate { get; set; } 
    // 新增可选的ignition属性,用可空bool适配部分对象无此字段的情况
    public bool? ignition { get; set; } 
}

2. 修正反序列化代码

因为你的JSON是单个Data对象,所以要反序列化成Data类型,而不是List<Data>:

string jsonString = "你的JSON字符串"; // 确保这里是正确的JSON内容
JavaScriptSerializer jSerObj = new JavaScriptSerializer();
// 改为反序列化为单个Data对象,而不是列表
Data resultData = (Data)jSerObj.Deserialize(jsonString, typeof(Data));

额外建议

如果可以的话,更推荐使用Newtonsoft.Json(Json.NET)来处理JSON序列化,它比JavaScriptSerializer更灵活且功能更强。使用Json.NET的反序列化代码示例:

Data resultData = JsonConvert.DeserializeObject<Data>(jsonString);

需要注意的是,如果你用Json.NET,还可以通过[JsonProperty]特性来处理字段名可能的拼写问题(比如你的JSON里的venndorName,是不是应该是vendorName?可以用特性映射):

[JsonProperty("venndorName")]
public string VendorName { get; set; }

内容的提问来源于stack exchange,提问作者DeepakVerma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:58:02