C# 读取JSON文件后无法将数据填充到Vehicle对象列表问题
C# JSON车辆列表加载问题修复方案
问题根因
ReadParkingFile方法中反序列化得到的data是方法内部局部变量,方法执行结束后就会被回收,完全没有赋值给全局的ParkingHouse.vehicles列表,是导致重启后数据无法加载的核心原因SaveToJasonFile方法的string vehicle入参完全没有被使用,属于冗余参数,方法名存在拼写错误(Jason应为Json,不影响功能执行)
修复后的代码
读取方法修复
public static void ReadParkingFile() { string path = @"../../../Configfile/ParkingList.json"; // 新增文件存在校验,避免首次启动无配置文件时报错 if (!File.Exists(path)) { ParkingHouse.vehicles = new List<Vehicle>(100); return; } string jsonText = File.ReadAllText(path); // 直接将反序列化结果赋值给全局车辆列表,空值兜底避免空引用异常 ParkingHouse.vehicles = JsonConvert.DeserializeObject<List<Vehicle>>(jsonText) ?? new List<Vehicle>(100); // 如果你需要保留原有列表的初始化内容,不希望直接覆盖,可以替换为以下代码: // List<Vehicle> data = JsonConvert.DeserializeObject<List<Vehicle>>(jsonText) ?? new List<Vehicle>(); // ParkingHouse.vehicles.AddRange(data); }
保存方法修复
// 移除无意义的入参,修正方法名拼写 public static void SaveToJsonFile() { string path = @"../../../Configfile/ParkingList.json"; // 格式化输出JSON,方便手动排查内容 string jsonContent = JsonConvert.SerializeObject(ParkingHouse.vehicles, Formatting.Indented); File.WriteAllText(path, jsonContent); }
额外注意事项
Vehicle类必须包含public无参构造函数,Newtonsoft.Json反序列化依赖无参构造创建对象,如果你的Vehicle类只定义了带参构造,需要手动补充public无参构造,否则会出现反序列化失败的问题
内容的提问来源于stack exchange,提问作者Flaxx
相关产品推荐
相关产品推荐

