Desalinizing初始化列表
问题描述:
下面是我们的生产代码提取呈现了问题的核心。第一次运行后,序列化列表有3个项目正确。但是,运行应用程序第二次(及以上)每次3项添加到XML和反序列化到列表后面。显示第一次运行后ABC即但经过第二ABCABC和第三ABCABCABC之后。Desalinizing初始化列表
Initialzier需要用于其他目的,并且不能被去除。
class Program
{
static void Main(string[] args)
{
var ser = new XmlSerializer(typeof(Ser));
Ser s;
try
{
using (var sr = new StreamReader("Test.xml"))
{
s = ser.Deserialize(sr) as Ser;
}
}
catch
{
s = new Ser();
}
using (var sw = new StreamWriter("Test.xml"))
{
ser.Serialize(sw, s);
}
foreach (var text in s.List)
{
Console.WriteLine(text);
}
}
}
public class Ser
{
public List<string> List { get; set; }= new List<string> {"A", "B", "C"}; //This initializer is a must
}
如何解决这个问题?
答
可以序列List<T>
为别的东西,例如数组,那么你不会有XmlSerializer
问题:
public class Ser
{
[XmlIgnore]
public List<string> List { get; set; } = new List<string> { "A", "B", "C" }; //This initializer is a must
[XmlArray(nameof(List))]
public string[] SerializedList
{
get { return List.ToArray(); }
set { List = new List<string>(value); }
}
}
这将产生完全相同的XML文件,但你将有额外的公共财产(要求为XmlSerializer
工作)。