2013-12-12 112 views
1

目前我正在使用列表製作一種歷史日誌。我通過簡單地使用XML序列化程序序列化來保存此列表,但是無論何時序列化列表然後反序列化它,順序都與我第一次創建列表時的順序不同。C#XML序列化保留列表<T>訂單

例如,當我首先創建列表時,它可以是在該順序​​

  1. Ç

然而,當我序列化/反序列化可能會變得像

  1. B
  2. ç
  3. 一個

有沒有一種方法或迫使串行序列化時保留列表的順序? (我發現它實際上將其保存在錯誤的順序開始說起)

目前代碼:

public static List<StoredData> clipboardData = new List<StoredData>(); 

private void SaveClipboard() 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(List<StoredData>)); 

    using (StreamWriter stream = new StreamWriter(historyFile)) 
    { 
     serializer.Serialize(stream, clipboardData); 
    } 

    Console.WriteLine("Saved"); 
} 

StoredData類

[Serializable] 
public class StoredData 
{ 
    public String storedClip; 
    public DateTime storedTime; 
} 
+1

您正在使用哪個序列化程序? – Baldrick

+0

@Baldrick XML串行器 –

+4

我幾乎肯定XmlSerializer保留了列表的順序。你可以發佈代碼和聲明的行爲是這樣嗎? – Baldrick

回答

-1

這裏是一個保存方式的順序序列化時您的XML

[Serializable] 
public class StoredData 
{ 
    [Datamember(Name = "Clip", Order = 1)] 
    public String storedClip; 
    [Datamember(Name = "Time", Order = 2)] 
    public DateTime storedTime; 
} 
+0

不,問題不是按錯誤順序(de)序列化的對象 – Snake

+0

獲取或設置成員序列化和反序列化的順序。 https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datamemberattribute.order(v=vs.110).aspx – Rober