2011-05-09 8 views
0

다른 질문과 관련하여 데이터를 직렬화 한 다음 직렬화를 해제했지만 새로운 데이터를 직렬화 된 arraylist에 쓰면 arraylist 끝에 새 데이터가 추가되지 않습니다. . 대신 이전 목록 데이터를 덮어 씁니다. 어떤 도움이라도 좋을 것입니다. 여기 내 코드는 지금까지의 :이전 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의 데이터를 할당 - 직접 할당 :

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