我可以序列化可序列化对象的通用列表,而无需指定它们的类型。
类似于下面的破损代码背后的意图:
List<ISerializable> serializableList = new List<ISerializable>();
XmlSerializer xmlSerializer = new XmlSerializer(serializableList.GetType());
serializableList.Add((ISerializable)PersonList);
using (StreamWriter streamWriter = System.IO.File.CreateText(fileName))
{
xmlSerializer.Serialize(streamWriter, serializableList);
}
编辑:
对于那些想了解细节的人:当我尝试运行此代码时,它在XMLSerializer [...]行上的错误如下:
无法序列化接口System.Runtime.Serialization.ISerializable。
如果我改变了List<object>
我会得到"There was an error generating the XML document."
。InnerException详细信息是"{"The type System.Collections.Generic.List1[[Project1.Person, ConsoleFramework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] may not be used in this context."}"
人员对象定义如下:
[XmlRoot("Person")]
public class Person
{
string _firstName = String.Empty;
string _lastName = String.Empty;
private Person()
{
}
public Person(string lastName, string firstName)
{
_lastName = lastName;
_firstName = firstName;
}
[XmlAttribute(DataType = "string", AttributeName = "LastName")]
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
[XmlAttribute(DataType = "string", AttributeName = "FirstName")]
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
PersonList只是一个List<Person>
。
不过,这只是用于测试,因此并不认为细节太重要。关键是我有一个或多个不同的对象,所有这些对象都是可序列化的。我想将它们全部序列化为一个文件。我认为最简单的方法是将它们放在通用列表中,然后一次性序列化列表。但这是行不通的。
我也尝试过List<IXmlSerializable>
,但是失败了
System.Xml.Serialization.IXmlSerializable cannot be serialized because it does not have a parameterless constructor.
抱歉,缺少详细信息,但是我是对此的初学者,不知道需要什么详细信息。如果人们要求更多细节,而试图以某种方式让我理解需要的细节或概述可能指示的基本答案,那将很有帮助。
也要感谢到目前为止我得到的两个答案-我可能会花更多的时间阅读而没有得到这些想法。人们在此站点上的帮助程度令人惊讶。