.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.
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.
相关文章推荐
- 序列化中的版本兼容问题
- .Net各版本在一台服务器上的兼容问题
- 项目从tomcat5升级到tomcat6中、el表达式与jsp版本不兼容问题、the JDBC Driver has been forcibly unregistered)
- Python2.7版本和3.6版本兼容问题
- 微软开源项目MSBEE 解决.net2.0VS.net1.1 过渡中兼容问题
- setBackground()版本兼容问题
- 解决Linux动态库版本兼容问题
- java序列化类的多版本问题
- 解决多版本sdk兼容问题
- 关于VS220113无法启动IIS Express,系统日志:工作进程未能预加载 .Net 运行时版本 v4.0.30128问题
- python连接oracle-从编码到版本不兼容等问题
- Windows Azure MMC与Windows Azure SDK 1.3版本的兼容问题
- 关于MSSQL的版本不兼容问题
- .NET中的序列化与反序列化的问题
- 解决Bootstrap不兼容IE8及以下版本的问题
- android版本兼容问题
- 如何解决IE版本兼容问题
- UIAlertView及UIActionSheet 在ios8极其以下版本的兼容问题解决方案
- [FlashPlyaer] FP版本20.0.267对Win10的64位系统的不兼容问题
- 惰性思想处理Ajax低版本IE兼容问题