脱盐初始化列表

时间:2017-05-09 11:26:25

标签: c# list xmlserializer initializer

以下是我们的生产代码的提取,它提出了问题的核心。首次运行序列化列表后正确有3个项目。但是,每次运行应用程序第二次(以及更多)后,每次将3个项目添加到xml和反序列化列表。即在首次运行之后显示ABC但是在第二次ABCABC之后和第三次ABCABCABC之后。

初始化需要用于其他目的,不能删除。

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
}

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以将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工作)。