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

如何将其他类的列表导入自定义Serializable类完成XML序列化?

实现方案

1. 先修改可序列化类定义,添加对应列表属性

XML序列化要求参与序列化的属性为公共可读写类型,你需要在ToSerialize类中定义和你原有列表类型完全匹配的属性,示例代码如下:

[Serializable]
public class ToSerialize
{
    // 此处的YourItemType替换为你列表的实际元素类型
    // 初始化空列表可以避免序列化时出现 null 引用异常
    [XmlArray("CustomListName"), XmlArrayItem("CustomItemName")]
    public List<YourItemType> TargetList { get; set; } = new List<YourItemType>();

    // 其余原有代码保留即可
}

如果需要调整列表在XML中的节点名称,可以通过XmlArray、XmlArrayItem特性自定义,不需要自定义的话可以去掉这两个特性。

2. 转移独立类中的列表数据

直接将独立类中的列表实例赋值给ToSerialize类的对应属性即可,示例代码如下:

// 实例化待序列化的对象
ToSerialize serializeInstance = new ToSerialize();
// 假设你的独立类实例为otherClassObj,其内部存储的列表属性为SourceList
// 直接赋值:两者会引用同一个列表实例,后续修改任意一边的列表元素都会同步生效
serializeInstance.TargetList = otherClassObj.SourceList;

// 如果需要两个列表完全独立互不影响,可以做深拷贝,示例如下:
// serializeInstance.TargetList = otherClassObj.SourceList.Select(item => new YourItemType
// {
//     Prop1 = item.Prop1,
//     Prop2 = item.Prop2,
//     // 其余属性依次拷贝
// }).ToList();

赋值完成后你就可以直接用serializeInstance做XML序列化操作。

注意事项
  • 列表的元素类型YourItemType需要满足XML序列化要求:必须包含无参公共构造函数,需要序列化的属性/字段设为公共访问权限
  • [Serializable]特性是为二进制序列化、RPC序列化场景准备的,XML序列化不需要该特性也能正常工作,保留也不会产生冲突
  • 如果原有列表是独立类的私有字段,你需要先在独立类中为该列表添加公共访问属性,或者提供公共方法返回列表实例,才能在外部获取到列表值做赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:27:04