Ich beobachtete ein seltsames Verhalten beim Serialisieren und Deserialisieren einer Klasse, die einen Member vom Typ List<T>
hat, der zur Konstruktionszeit mit Standardwerten gefüllt wurde. Im Gegensatz zur Array-basierten Eigenschaft wird die Eigenschaft vom Typ List<T>
bei der Deserialisierung durch den XmlSerializer nicht geleert.XmlSerializer und Liste <T> mit Standardwerten
Hier ist mein Code:
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));
}
}
}
Und dies ist die Ausgabe:
<?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>
Warum ist die List<T>
anders von XmlSerializer als das Array behandelt und was kann ich tun, um dieses Verhalten zu ändern?
ich gleich Problem haben, finden Sie http://stackoverflow.com/questions/5221124/hook-in-to-ondeserializing-for-xmlserializer für Lösung –
Verwandte: http://stackoverflow.com/q/ 13046474/161052 – JYelton