XmlSerializer и List со значениями по умолчанию

я наблюдал странное поведение при сериализации, а затем десериализации класса, который имеет член типа List , который был заполнен значениями по умолчанию во время создания. В отличие от свойства на основе массива, свойство типа List не будет очищено при десериализации с помощью XmlSerializer.

Вот мой код:

public class Program
{
    public class Config
    {
        public Config()
        {
            Test1 = new List<string>()  {"A", "B"};
            Test2 = new String[] {"A", "B"};
        }
        public List<string> Test1 {get;set;}
        public string[] Test2 {get;set;}
    }

    public static void Main()
    {
        XmlSerializer xmlSerializer =
            new XmlSerializer(typeof(Config));
        using(Stream s = new MemoryStream())
        {
            xmlSerializer.Serialize(s, new Config());
            s.Position = 0;
            xmlSerializer.Serialize(Console.Out,
                xmlSerializer.Deserialize(s));
        }
    }
}

И это результат:

<?xml version="1.0" encoding="ibm850"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Test1>
    <string>A</string>
    <string>B</string>
    <string>A</string>
    <string>B</string>
  </Test1>
  <Test2>
    <string>A</string>
    <string>B</string>
  </Test2>
</Config>

Почему список обрабатывается XmlSerializer иначе, чем массив, и что я могу сделать, чтобы изменить это поведение?

12
задан Conrad Frix 18 November 2010 в 16:35
поделиться