2012-04-15 118 views
2

我正在Visual Studio 2010上的一个小型c#项目中工作,并且我试图序列化一个具有People类对象的ArrayList。这里是我的代码块使用XmlSerializer序列化ArrayList

FileStream fs = new FileStream("fs.xml", FileMode.OpenOrCreate, FileAccess.Write); 
XmlSerializer xml = new XmlSerializer(typeof(ArrayList)); 
xml.Serialize(fs,this.array); 

并且在最后一行显示“生成XML文档时发生错误”的错误消息。任何人都可以帮我放好吗?

+0

听起来像你的问题是与'this.array'。 – 2012-04-15 08:09:40

+3

根本不要使用'ArrayList',使用'List '。只有在使用框架1.x时才需要'ArrayList',并且Visual Studio 2010甚至无法以框架1.x为目标... – Guffa 2012-04-15 08:12:22

+0

'this.array'的类型是什么,它包含了什么? – CodesInChaos 2012-04-15 08:13:28

回答

2

您得到此错误的原因是因为您使用的是ArrayList,而XmlSerializer不知道您的Person类。一种可能性是实例序列化时,指示串行作为已知类型:

var serializer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Person) }); 

但更好的方法是使用一个通用的List<T>代替ArrayList中。因此,让我们假设你有以下型号:

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

现在你可以有人名单:

List<Person> people = new List<Person>(); 
people.Add(new Person { FirstName = "John", LastName = "Smith" }); 
people.Add(new Person { FirstName = "John 2", LastName = "Smith 2" }); 

,你可以序列:

using (var writer = XmlWriter.Create("fs.xml")) 
{ 
    var serializer = new XmlSerializer(typeof(List<Person>)); 
    serializer.Serialize(writer, people); 
} 
+0

非常感谢。我对c#很新颖:D有一个愉快的一天。 – user1334254 2012-04-15 08:20:05

+0

我有同样的问题。我正在使用ArrayList,因为我正在写一个COM Interop DLL。是否有另一种解决方案使用ArrayList,并且不需要为Serializer构造函数传递类型? – Ewerton 2017-05-23 14:25:13

相关问题