2011-05-09 14 views
0

私の他の質問に関しては、データをシリアル化してから逆シリアル化したが、新しいデータを直列化されたarraylistに書き込むとき、新しいデータをarraylistの最後に追加しない。代わりに、以前のリストデータを上書きしています。どんな助けも素晴らしいだろう。ここに私のコードは、これまでのところです:前のxmlを逆シリアル化するが、前の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

あなたが実際にあなたが後で更新しようとする変数であるsiteListにデシリアライズされた配列リストからデータを割り当てることはありません - それを直接割り当てる:

ArrayList siteList = DeserializeArray(); 

と事前XMLが存在しない場合の世話をするためにあなたのDeserializeArray()メソッド更新:

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

ありがとうITワークス! – karlstackoverflow

関連する問題