c# - Desalinizing 初始化列表

标签 c# list xmlserializer initializer

<分区>

下面是我们生产代码的摘录,它展示了问题的核心。第一次运行后,序列化列表正确地包含 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 文件,但您将拥有额外的公共(public)属性(XmlSerializer 工作的要求)。

关于c# - Desalinizing 初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43868557/

相关文章:

c# - 访问通用实例属性

c# - 判断三角形是否正对

c - 获取C双向链表中的最后一个元素错误

sql-server-2005 - 如何将 ILMerge 与 SQL Server 2005 CLR 程序集和 XmlSerializer 一起使用

c# - 使用 log4net + AutoFac 拦截器记录所有处理的异常

python - 使用列表和文本文件的字符串索引超出范围错误(使用Python)

Python读取Excel电子表格,根据变量和条件创建多个列表

c# - 强制 ASMX 代理使用 XmlSerializer 而不是 DataContractSerializer

c# - XmlSerializer 缓存工厂

c# - 如何在 c# 中的另一个程序之上制作非交互式图形叠加?