Я наблюдал странное поведение при сериализации и десериализации класса, который имеет член типа List<T>
, который был заполнен значениями по умолчанию во время построения. В отличие от свойства массива свойство типа List<T>
не будет опустошено при десериализации с помощью 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>
Почему List<T>
обрабатывается по-разному с помощью XmlSerializer, чем массив, и что я могу сделать, чтобы изменить это поведение?