2017-05-09 16 views
2

以下は、問題の中核を示す生産コードの抜粋です。最初の実行後、シリアル化されたリストには3つの項目が正しくあります。しかし、アプリケーションを2回目以降実行した後は、xmlに3つのアイテムが追加され、デシリアライズされたリストに追加されます。すなわち、最初の実行後にABCが表示されるが、2番目のABCABCの後および3番目のABCABCABCの後に表示される。脱塩初期化リスト

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>を別のものとしてシリアル化できます。まったく同じ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); } 
    } 
} 

:配列は、その後、あなたはXmlSerializerの問題はありません。

関連する問題