假设我有以下代码:版本控制:可能删除WCF DataContract序列化中的列表元素?
namespace Test
{
[DataContract()]
internal class Class2 : AbstractSerializeableObject
{
[DataMember()]
int[] ints;
protected override XMLVersion ObjectVersion
{
get { return version; }
}
[DataMember()]
private XMLVersion version = new XMLVersion(1, 0, 0, "Test");
protected override void SetDefaults()
{
ints = new int[] { 1, 2, 3, 4 };
}
}
}
最终将序列化下列XML文件:
<?xml version="1.0" encoding="utf-8"?>
<Class2 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Test">
<ints xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<d2p1:int>1</d2p1:int>
<d2p1:int>2</d2p1:int>
<d2p1:int>3</d2p1:int>
<d2p1:int>4</d2p1:int>
</ints>
<version xmlns:d2p1="http://schemas.datacontract.org/2004/07/XMLSerializationLib">
<d2p1:description></d2p1:description>
<d2p1:major>1</d2p1:major>
<d2p1:minor>0</d2p1:minor>
<d2p1:patch>0</d2p1:patch>
<d2p1:title>Test</d2p1:title>
</version>
</Class2>
现在我想从我的ints
数组中删除了几个元素。我的AbstractSerializeableObject
被设计为SetDefaults
在序列化或调用构造函数时被调用(与接受的答案here相同)问题是DataContractSerializer读入整个集合的内容(不管有多少元素在默认数组)。因此,如果XML中有4个元素,我的默认值列表中有2个元素,那么在我的反序列化数组中将会有4个元素。
有什么办法可以修复集合的大小,以便在反序列化时省略XML文件中的额外值?
您不能更改数组的大小。为什么不使用列表? –
ErnieL
这不是问题;如果我使用列表,数组或字典,我会遇到同样的问题;真的任何收藏。 – audiFanatic
假设我在DataContract的第一个版本中用5个元素初始化数组。然后假设我对合同进行了修改,并用3个元素对其进行初始化。当来自前一个合同的XML文件使用新合同进行反序列化时,它将抽取5个元素,而不是3个。 – audiFanatic