簡體   English   中英

將XML反序列化為對象列表

[英]deserialize XML to List of objects

我有一個用ToDo對象填充並保存到XML的列表。 這很完美。 將XML反序列化為ToDo對象列表時遇到問題。 我知道類似的問題已經很少了,但是沒有一個問題對我有幫助,因此,我在寫。

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反序列化為ToDo對象列表?

非常感謝您的幫助。

以下對我有用

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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM