2012-04-15 109 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

相關問題