【问题标题】:Desalinizing Initialized list [duplicate]脱盐初始化列表[重复]
【发布时间】:2017-10-07 16:34:09
【问题描述】:

下面是我们生产代码的摘录,它代表了问题的核心。首次运行后,序列化列表正确包含 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
}

如何解决这个问题?

【问题讨论】:

    标签: c# list xmlserializer initializer


    【解决方案1】:

    您可以将List&lt;T&gt; 序列化为其他内容,例如数组,那么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 工作的要求)。

    【讨论】:

      猜你喜欢
      • 2012-09-29
      • 2015-09-25
      • 2017-01-14
      • 2012-03-19
      • 2022-10-25
      • 2014-06-10
      • 2016-02-14
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多