2017-10-17 91 views
0

我基本上試圖將播客添加到XML文件,並最終使用該應用程序的不同部分中的數據從相同的XML中檢索它們。在C#中序列化XML#

我成功將數據寫入XML,但每次重新啓動應用程序(調試)並按下「提交」按鈕時,XML文件將重置爲0個條目。

的提交代碼:

PodcastList podList = new PodcastList(); 

    private void btnAddPod_Click(object sender, EventArgs e) 
    { 
     var podUrl = txtAddPod.Text; 
     var podName = txtEnterName.Text; 

     podList.AddPod(podUrl, podName, 0); 

     Xml.SaveListData(podList.GetPodcastList(), "Podcasts.xml"); 
    } 

保存到XML:

public static void SaveListData(object obj, string filename) 
    { 
     var serializer = new XmlSerializer(obj.GetType()); 

     using (var stream = new StreamWriter(filename)) 
     { 
      serializer.Serialize(stream, obj); 
     } 
    } 

我猜的應用程序創建一個新的XML文件每次我按時間提交併有新鮮的對象。我究竟做錯了什麼?乾杯

+0

需要發佈重現問題的相關代碼和xml示例。 – derloopkat

+0

您是否嘗試將文件保存在'/ bin/Debug'之外? – Michael

+3

您沒有任何** ** ** **文件的代碼。每次按添加,都會創建一個新文件。該文件覆蓋現有文件(如果有的話)。 – Serge

回答

0

PodcastList podList = new PodcastList();是在課堂上。

如果要維護狀態,請重新加載XML文件在構造函數中或在加載時將文件反序列化到PodcastList,然後您將能夠保留並重用該集合並將數據重寫回XML文件。

0

由於需要打開和關閉標籤,XML文件通常不會「附加到」。與之相反,其他類型的文本文件(如日誌文件)在添加後會更有意義。

當您撥打serializer.Serialize時,整個文件被覆蓋。

您的程序需要執行的操作是在啓動時讀取已存在的XML文件,並將其存儲爲PodcastList()。然後您的程序可以添加到它(在內存中)並將整個列表保存爲一個文件。