2

是否可以在不诉诸自定义序列化的情况下将自定义对象的 ArrayList 保存到应用程序用户设置中?

例如,给定一个仅包含公共 get/set 属性和私有支持字段的基本数据类:

[Serializable]
class SimpleClass()
{
  ...   
}

当我在代码中运行以下代码,然后重新启动应用程序时,名为 MyList 的 ArrayList 设置始终为空,即未保存。

if (Properties.Settings.Default.MyList==null)
{
    Properties.Settings.Default.MyList=new ArrayList();
}

Properties.Settings.Default.MyList.Add(new SimpleClass(DateTime.Now.ToString()));

Properties.Settings.Default.Save();

我意识到没有输入 ArrayList,即。它拥有一组对象。然而,在每个对象上使用 GetType() 来确定实际类型很简单。这应该允许序列化发生,不是吗?

我也知道如何绕过这个执行一些自定义序列化。这只是一种痛苦,这似乎不起作用,因为它对于更简单的情况来说是迄今为止最方便的。

有任何想法吗?

4

1 回答 1

1

如果您使用 XML 序列化,则可以使用 XmlArrayItem 属性。

 [XmlArray("Items")]
 [XmlArrayItem("A.Thing",typeof(Thing))]
 [XmlArrayItem("A.Different.Thing",typeof(Whatzit))]
 public System.Collections.ArrayList List;

这要求您在编译时了解 ArrayList 中可能存在的不同类型。

于 2009-03-28T22:57:50.460 回答