2011-05-09 92 views
0

關於我的另一個問題,我已序列化數據,然後將其反序列化,但是當我將新數據寫入反序列化數組列表時,它不會將新數據添加到數組列表的末尾。而是覆蓋以前的列表數據。任何幫助都會很棒。這裏是我到目前爲止的代碼:反序列化,但沒有添加到以前的xml

{ 
     ArrayList siteList = new ArrayList(); 
     ArrayList copy = new ArrayList(siteList); 

     //if previous data exists, deserialize it 
     try 
     { 
      ArrayList deserializedArray = DeserializeArray(); 

      foreach (var item in deserializedArray) 
      { 
       Console.WriteLine(item); 
      } 
      Console.WriteLine("------"); 
     } 
     catch 
     { 
      Console.WriteLine("No previous data found"); 
     } 
     siteList.Add("Test 3"); 
     siteList.Add("Test 4"); 

     //Display all current items in list 
     foreach (var item in siteList) 
     { 
      Console.WriteLine(item); 
     } 
     SerializeArray(siteList); 
     Console.Read(); 
    } 

    public static void SerializeArray(ArrayList siteList) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(ArrayList)); 
     TextWriter textWriter = new StreamWriter("SiteList.xml"); 
     serializer.Serialize(textWriter, siteList); 
     textWriter.Close(); 
    } 

    static ArrayList DeserializeArray() 
    { 
     XmlSerializer deserializer = new XmlSerializer(typeof(ArrayList)); 
     TextReader textReader = new StreamReader("SiteList.xml"); 
     ArrayList siteList; 
     siteList = (ArrayList)deserializer.Deserialize(textReader); 
     textReader.Close(); 

     return siteList; 
    } 
} 

}

回答

2

你從來沒有真正從反序列化ArrayList中的數據分配給siteList這是您稍後嘗試更新變量 - 直接分配給它:

ArrayList siteList = DeserializeArray(); 

和更新您的DeserializeArray()方法來採取事先沒有XML存在的情況下照顧:

static ArrayList DeserializeArray() 
{ 
    if(!File.Exists("SiteList.xml")) 
     return new ArrayList(); 

    XmlSerializer deserializer = new XmlSerializer(typeof(ArrayList)); 
    TextReader textReader = new StreamReader("SiteList.xml"); 
    ArrayList siteList = (ArrayList)deserializer.Deserialize(textReader); 
    textReader.Close(); 

    return siteList; 
} 

一般來說,使用異常來控制流是一個壞主意,特別是在這種情況下,您可以只檢查文件是否存在。

的最後一個方法將是這個樣子,然後(一些絨毛去除):

static void Main(string[] args) 
{ 
    ArrayList siteList = DeserializeArray(); 
    siteList.Add("Test 3"); 
    siteList.Add("Test 4"); 
    foreach (var item in siteList) 
    { 
     Console.WriteLine(item); 
    } 
    SerializeArray(siteList); 
    Console.Read(); 
} 
+0

THANK YOU IT WORKS! – karlstackoverflow 2011-05-09 01:43:25