IExtensibleDataObject,MSDN给出的解释为:提供一个数据结构,用于存储 XmlObjectSerializer 在反序列化一个用 DataContractAttribute 属性标记的类型期间遇到的额外数据。
IExtensibleDataObject 相当于提供类似于double到int的转换,但区别在于此转换并不舍弃多余数据(比如小数部分)而只是隐藏,
IExtensibleDataObject 在反序列化过程中保证xml和反序列化对象中共同存在的元素出现在反序列化后的对象中,并保证多余数据不丢失,
说明:
假设A,B是继承IExtensibleDataObject的两个类 ,并且A和B都拥有同名同类型的2个属性x,y,但B比A多了一个c属性。
1使用DataCantracttSerializer将一个B对象序列化为xml保存,(xml中拥有三个属性)
2使用上一步的xml反序列化成A对象,(A对象的两个属性都有值)
3在将反序列化的A对象序列化为xml,(xml中还是拥有3个对象)
4使用上一步的xml发序列化成B对象(B对象中还是原有三个属性,并且没有属性丢失值)
可参考“http://www.cnblogs.com/CharlesLiu/archive/2010/02/09/1666605.html”中的代码