反序列化的时候是使用构造函数生成一个实例,然后将内容根据类的属性或字段进行填充,不是赋值操作,是以一种类似于Add的方式进行填充。
public Class A
{
public List<int> Test{ set; get; }
public A()
{
for(int i=0; i<12; i++)
{
Test.Add(0);
}
}
}
//执行以下代码
{
A pT = new A();
string tData = JsonConvert.SerializeObject(pT, Formatting.Indented);
A pK = JsonConvert.DeserializeObject<A>(tData);
}
执行上述的代码后,pK.Test.Count的值为24,而不是12。
所以在要进行序列化反序列化操作的类的构造函数中不要对List进行实际的添加元素初始化操作。
本文探讨了在反序列化过程中List数量异常倍增的问题。原因是反序列化时并非简单赋值,而是通过构造函数和类的属性填充,类似Add操作,导致List元素数量翻倍。为避免此问题,建议不在类的构造函数中初始化List并添加元素。

1641

被折叠的 条评论
为什么被折叠?



