C#中的XML序列化程序

时间:2011-07-03 04:45:34

标签: c# xmlserializer

我正在使用XMLSerializer加载一些对象:

using (FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read, FileShare.None))
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof (ModelDescriptor));
    modelDescriptor = (ModelDescriptor) xmlSerializer.Deserialize(fileStream);
}

这将使用XML文件中的数据加载ModelDescriptor对象。但是,如何以这种方式加载多个对象?我想我需要一个循环,但有没有办法提前知道有多少个对象?如果我通过尝试从不存在的XML文件加载对象来超越列表,则会出现InvalidOperationException。这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

如果文件中有多个ModelDescriptor个对象,为了使XML文件有效,您必须拥有一个根元素 - 例如:

<root>
   <ModelDescriptor>
       ....
   </ModelDescriptor>
   <ModelDescriptor>
      ....
   </ModelDescriptor>
</root>

基本上,你创建了一个虚拟的“容器”类,然后它包含ModelDescriptor个对象的列表:

[XmlRoot(Namespace = "", IsNullable = false)]
public class root
{
    [XmlElement("ModelDescriptor", Form = XmlSchemaForm.Unqualified)]
    public List<ModelDescriptor> Items { get; set; }
}

public class ModelDescriptor
{
    public string Model { get; set; }
}

现在,您应该能够将文件反序列化为root类型的对象,并将您的ModelDescriptors放入Items列表中:

FileStream fs = new FileStream(@"YourFileNameHere", FileMode.Open, FileAccess.Read);

XmlSerializer ser = new XmlSerializer(typeof(root));

var result = ser.Deserialize(fs); // would be an object of type "root" with the ModelDescriptor inside