您的位置:首页 > 其它

.Net 序列化中 版本兼容问题

2009-06-01 14:44 351 查看
如果你试图反序列化一个早期版本的对象,将有可能出现版本兼容问题, 例如,你添加了一个成员到你自定义类中,当你反序列化早期版本时,就会抛出一个异常(.Net framework1.0或者1.1时). 在这种情况下通常有2中解决办法:

1. 在序列化新版本的自定义类时,导入旧版本的自定义类。

2. 标识新添加的成员为OptionalField.

OptionalFied属性并不会影响对象序列化过程,当在反序列化时,CLR碰见OptionalFiled属性时,就会自动赋NULL值给改成员而不是抛出异常.例如:

[Serializable]
class ShoppingCartItem : IDeserializationCallback
{
public int productId;
public decimal price;
public int quantity;
[NonSerialized]
public decimal total;
[OptionalField]
public bool taxable;
}

所以建议:

1. 不要移除标识有[serialized]属性的字段

2. 不要标识[NonSerilized]属性给字段,如果该字段在早期版本中被序列化

3. 不要改变成员的类型或名字

4. 当添加一个新的序列化成员时,需要标识为[OptionalField].

5. 当你希望移除[NonSerilized]属性时,建议用[OptionalField]代替

6. 对于你标识为[OptionalField]字段,如果你希望在反序列化中初始化该成员,你可以实现IDeserializationCallback接口并实现OnDeserialization方法. 除非你只需要赋值为0或者NULL.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: