JavaScriptSerializer序列化二级对象时列表为空问题求助
问题原因分析
你遇到的问题核心在于 JavaScriptSerializer 默认只序列化类的公共(public)成员,而你的 Ccanister 类里的 identifier 字段是私有的(没有加 public 修饰符),同时这个类也没有任何其他公共属性/字段可以被序列化。
虽然你调试时看到 canister 列表有数据,但因为列表里的 Ccanister 对象没有可被序列化的公共成员,JavaScriptSerializer 无法识别这些对象的有效内容,最终导致序列化后的 canister 列表要么显示为空对象数组,要么看起来像是空列表(取决于序列化的具体表现)。
解决方案
只需要修改 Ccanister 类,把 identifier 字段改为公共的,或者添加一个带公共 getter 的属性即可:
方案1:将字段改为公共(快速解决)
public class Ccanister { public string identifier; // 添加public修饰符 public Ccanister(string c) { identifier = c; } }
方案2:使用公共属性(更符合C#编码规范)
public class Ccanister { public string Identifier { get; private set; } // 公共只读属性 public Ccanister(string c) { Identifier = c; } }
修改后重新执行序列化代码,canister 列表就能正确显示其中的内容了。
额外验证建议
确保你在初始化 medicine 对象时,正确实例化并填充了 canister 列表,比如:
// 示例初始化代码 var sampleCanister = new Ccanister("can_001"); var sampleMedicine = new medicine { id = "med_001", displayName = "Paracetamol", canister = new List<Ccanister> { sampleCanister } }; var dataM = new dataMedicine { detail = new List<medicine> { sampleMedicine } };
这样调试和序列化时的内容就能完全对应上了。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

