Observé un comportamiento extraño al serializar y deserializar una clase que tiene un miembro del tipo List<T>
que se llenó con valores predeterminados en tiempo de construcción. A diferencia de la propiedad basada en matrices, la propiedad del tipo List<T>
no se vaciará en la deserialización por XmlSerializer.XmlSerializer y List <T> con valores predeterminados
Aquí está mi código:
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));
}
}
}
Y esta es la salida:
<?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>
¿Por qué es el List<T>
manejado de manera diferente por XmlSerializer de la matriz y qué se puede hacer para cambiar este comportamiento?
tengo problema de semejanza, veo http://stackoverflow.com/questions/5221124/hook-in-to-ondeserializing-for-xmlserializer para la solución –
relacionados: http://stackoverflow.com/q/ 13046474/161052 – JYelton