This question already has answers here:
Deserializing List<int> with XmlSerializer Causing Extra Items
(2个答案)
2年前关闭。
以下是我们的生产代码的摘录,提出了问题的核心。第一次运行后,序列化列表正确包含3个项目。但是,在第二次(和多次)运行应用程序之后,每次将3个项目添加到xml和反序列化列表中。即在第一次运行后显示ABC,但在第二次ABCABC之后和第三次ABCABCABC之后显示。
Initialzier是用于其他目的的,不能删除。
如何解决这个问题呢?
这将产生完全相同的xml文件,但是您将拥有额外的公共属性(
(2个答案)
2年前关闭。
以下是我们的生产代码的摘录,提出了问题的核心。第一次运行后,序列化列表正确包含3个项目。但是,在第二次(和多次)运行应用程序之后,每次将3个项目添加到xml和反序列化列表中。即在第一次运行后显示ABC,但在第二次ABCABC之后和第三次ABCABCABC之后显示。
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
起作用的要求)。关于c# - 初始化列表脱盐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43868557/
10-11 05:15