我正在使用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。这样做的最佳方式是什么?
答案 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