【发布时间】:2010-11-15 19:29:52
【问题描述】:
我可以序列化一个可序列化对象的通用列表而不必指定它们的类型吗?
类似于以下损坏代码背后的意图:
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."}"
person对象定义如下:
[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.
抱歉缺少细节,但我是这方面的初学者,不知道需要什么细节。如果询问更多细节的人试图以一种让我了解需要哪些细节的方式做出回应,或者提供概述可能方向的基本答案,那将会很有帮助。
另外感谢到目前为止我得到的两个答案 - 如果没有得到这些想法,我本可以花更多时间阅读。令人惊讶的是,人们在这个网站上乐于助人。
【问题讨论】:
-
我试过了,没用,我不知道怎么让它工作。我尝试将其更改为 List
-
它以什么方式“不起作用”?如果您需要答案,请提供详细信息。
-
您遇到了什么错误?是所有对象都实现了
ISerializable还是只有[Serializable]属性? -
John:上面的例子(当适用于 List
-
无参数构造函数错误,因为您尝试序列化的类没有不带参数的构造。在每个类上定义一个私有的
(){},这样就会消失。
标签: c# list generics xml-serialization