将XML反序列化为对象列表
本文关键字:对象 列表 反序列化 XML | 更新日期: 2024-06-14 04:44:52
我有一个用ToDo对象填充并保存到XML的列表。这非常有效。我在将XML反序列化回"待办事项列表"对象时遇到问题。我知道类似的问题已经很少了,但没有一个对我有帮助,所以,我正在写作。
ToDo对象类:
public class ToDo
{
public string ToDoString;
public DateTime Date;
}
要序列化和反序列化的主要程序类和方法:
static class Program
{
static List<ToDo> ToDoList = new List<ToDo>();
public static void Serialize(string toDoString)
{
// Create and Initialise the object
ToDo newToDo = new ToDo();
newToDo.ToDoString = toDoString;
newToDo.Date = DateTime.Now;
// Add the object to the List
ToDoList.Add(newToDo);
// Serialize List and save to XML
XmlSerializer mySerializer = new XmlSerializer(ToDoList.GetType());
// To write to a file, create a StreamWriter object.
StreamWriter myWriter = new StreamWriter("myXML.xml");
mySerializer.Serialize(myWriter, ToDoList);
myWriter.Close();
}
public static void Deserialize()
{
// This code was originally wrote to deserialize single object. Now I need to deserialize List of objects and this code doesn't work.
XmlSerializer myDeserializer = new XmlSerializer(ToDoList.GetType());
FileStream myFileStream = new FileStream("myXML.xml", FileMode.Open);
deserializeToDo = (ToDo) // Problems start here
myDeserializer.Deserialize(myFileStream);
myFileStream.Close();
}
}
那么,我如何将XML反序列化为待办事项列表对象呢?
非常感谢您的帮助。
以下适用于我的
var loadedData = (List<ToDo>)myDeserializer.Deserialize(myFileStream);
我刚刚在Deserialize
中更改了这一行
XmlSerializer myDeserializer = new XmlSerializer(typeof(List<ToDo>));
FileStream myFileStream = new FileStream("myXML.xml", FileMode.Open);
var loadedData = (List<ToDo>)myDeserializer.Deserialize(myFileStream);
myFileStream.Close();
给你的一个提示
public static void Deserialize()
{
var myDeserializer = new XmlSerializer(typeof(List<ToDo>));
List<ToDo> ToDoList;
using (var myFileStream = new FileStream("myXML.xml", FileMode.Open))
{
ToDoList = (List<ToDo>)myDeserializer.Deserialize(myFileStream);
}
}
using
块将为您关闭一个流。
您应该使用以下语句对其进行反序列化:
var deserializedToDoList = (List<ToDo>)myDeserializer.Deserialize(myFileStream);
这就可以了。
删除带有注释的代码行//问题从这里开始。
捕获myDeserializer.Deserialize(myFileStream)的输出,如下所示:
public static void Deserialize()
{
XmlSerializer myDeserializer = new XmlSerializer(ToDoList.GetType());
FileStream myFileStream = new FileStream("myXML.xml", FileMode.Open);
var listOfTodos = (List<ToDo>)myDeserializer.Deserialize(myFileStream);
myFileStream.Close();
}