Deserializing List<int> with XmlSerializer Causing Extra Items

六眼飞鱼酱① 提交于 2019-11-28 00:50:37

It happens because you are initializing the List in the constructor. When you go to deserialize, a new ListTest is created and then it populate the object from state.

Think of the workflow like this

  1. Create a new ListTest
  2. Execute the Constructor (add 1,2,3,4)
  3. Deserialize the xml state, and add 1,2,3,4 to the List

A simple solution would be to init the object outside the scope of the constructor.

public class ListTest
{
    public int[] Array { get; set; }
    public List<int> List { get; set; }

    public ListTest()
    {

    }

    public void Init() 
    {
        Array = new[] { 1, 2, 3, 4 };
        List = new List<int>(Array);
    }
}

ListTest listTest = new ListTest();
listTest.Init(); //manually call this to do the initial seed

The issue is that you're defining the original 1,2,3,4 in the List in the default constructor. Your deserializer is adding to the list, not defining it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!