2017-05-09 5 views
2

다음은 문제의 핵심을 제시하는 생산 코드를 추출한 것입니다. 처음 실행 된 후 직렬화 된 목록에는 3 개의 항목이 올바르게 있습니다. 그러나 앱을 두 번 이상 실행 한 후에는 xml에 3 개의 항목이 추가되고 직렬화되지 않은 목록에 매번 추가됩니다. 즉, 첫 번째 실행 후 ABC가 표시되지만 두 번째 ABCABC 이후 및 세 번째 ABCABCABC 이후에 표시됩니다.Desalinizing 초기화 목록

Initialzier는 다른 용도로 필요하며 제거 할 수 없습니다.

class Program 
{ 
    static void Main(string[] args) 
    { 
     var ser = new XmlSerializer(typeof(Ser)); 
     Ser s; 
     try 
     { 
      using (var sr = new StreamReader("Test.xml")) 
      { 
       s = ser.Deserialize(sr) as Ser; 
      } 

     } 
     catch 
     { 
      s = new Ser(); 
     } 

     using (var sw = new StreamWriter("Test.xml")) 
     { 
      ser.Serialize(sw, s); 
     } 

     foreach (var text in s.List) 
     { 
      Console.WriteLine(text); 
     } 
    } 
} 

public class Ser 
{ 
    public List<string> List { get; set; }= new List<string> {"A", "B", "C"}; //This initializer is a must 
} 

이 문제를 해결하는 방법은 무엇입니까?

답변

0

List<T>을 다른 것으로 serialize 할 수 있습니다. 배열, 당신은 XmlSerializer으로 문제가되지 않습니다

정확히 동일한 XML 파일을 생성 할 것입니다,하지만 당신은 (일 XmlSerializer에 대한 요구 사항) 추가 공유 재산이있을 것이다
public class Ser 
{ 
    [XmlIgnore] 
    public List<string> List { get; set; } = new List<string> { "A", "B", "C" }; //This initializer is a must 

    [XmlArray(nameof(List))] 
    public string[] SerializedList 
    { 
     get { return List.ToArray(); } 
     set { List = new List<string>(value); } 
    } 
} 

.