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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:13