Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlSerializer序列化ArrayList_C#_.net_Xml Serialization - Fatal编程技术网

C# 使用XmlSerializer序列化ArrayList

C# 使用XmlSerializer序列化ArrayList,c#,.net,xml-serialization,C#,.net,Xml Serialization,我在VisualStudio2010从事一个小型的c项目,试图序列化一个arraylist,其中包含我的人民对象类。这是我的代码块 FileStream fs = new FileStream("fs.xml", FileMode.OpenOrCreate, FileAccess.Write); XmlSerializer xml = new XmlSerializer(typeof(ArrayList)); xml.Serialize(fs,this.array); 最后一行有一条错误消息,

我在VisualStudio2010从事一个小型的c项目,试图序列化一个arraylist,其中包含我的人民对象类。这是我的代码块

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

最后一行有一条错误消息,“生成XML文档时出错。”有人能帮我写一下吗?

出现此错误的原因是因为您使用的是
ArrayList
,XmlSerializer不知道您的
Person
类。一种可能性是,在实例化序列化程序时,向序列化程序指示已知类型:

var serializer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(Person) });
但更好的方法是使用泛型
列表
而不是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" });
List people=newlist();
添加(新人物{FirstName=“John”,LastName=“Smith”});
添加(新人物{FirstName=“John 2”,LastName=“Smith 2”});
您可以序列化:

using (var writer = XmlWriter.Create("fs.xml"))
{
    var serializer = new XmlSerializer(typeof(List<Person>));
    serializer.Serialize(writer, people);
}
使用(var writer=XmlWriter.Create(“fs.xml”))
{
var serializer=newxmlserializer(typeof(List));
序列化程序。序列化(作者、人员);
}

听起来你的问题在于
这个.array
。根本不要使用
ArrayList
,使用
列表。只有当您无法使用framework 1.x,并且Visual Studio 2010甚至无法将framework 1.x作为目标时,才需要
ArrayList
。此.array的
类型是什么,它包含什么?我也有同样的问题。我使用ArrayList是因为我正在编写COM互操作DLL。是否有另一种解决方案使用ArrayList并且不需要为序列化程序构造函数传递类型?