【发布时间】:2011-05-12 03:43:37
【问题描述】:
我在序列化和反序列化具有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>
为什么 XmlSerializer 对 List<T> 的处理方式与数组不同,我可以做些什么来改变这种行为?
【问题讨论】:
-
我也有类似的问题,解决方法见stackoverflow.com/questions/5221124/…
标签: c# .net xml generics xml-serialization