向自定义列表添加自定义对象时触发System.NullReferenceException异常
解决ProductList.Data空引用异常问题
问题根源
你创建ProductList实例时,其Data属性并未初始化。C#中引用类型(比如List<T>)默认值为null,直接调用market.Data.Add(product)自然会触发NullReferenceException。
修复方案
有两种简单的方式初始化Data属性:
方式1:在ProductList构造函数中初始化
修改ProductList类,添加构造函数初始化Data:
public class ProductList { public List<ProductData> Data { get; set; } public ProductList() { // 初始化List,避免null Data = new List<ProductData>(); } }
方式2:使用自动属性默认值(C# 6及以上版本支持)
直接在属性声明时赋值默认值,代码更简洁:
public class ProductList { // 声明时直接初始化List public List<ProductData> Data { get; set; } = new List<ProductData>(); }
额外建议:避免手写JSON解析器
你当前的自定义解析器依赖字符串索引定位字段,存在很多隐患:
- JSON字段顺序变化会导致解析失败
- 字段值包含特殊字符(比如逗号、引号)时会出错
- 嵌套结构、空格差异等情况都可能破坏解析逻辑
C#内置了成熟的JSON序列化库System.Text.Json(.NET Core 3.0+/.NET 5+),用它可以彻底替代手写解析,代码更简洁可靠。示例如下:
using System.Text.Json; public static ProductList CustomJsonParser(string json) { // 直接反序列化为ProductList对象,无需手动解析 return JsonSerializer.Deserialize<ProductList>(json); }
内容的提问来源于stack exchange,提问作者Secure Aviator
相关产品推荐
相关产品推荐

