首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flexjson和版本控制: flexjson如何适应变化?

flexjson和版本控制: flexjson如何适应变化?
EN

Stack Overflow用户
提问于 2013-04-29 18:23:57
回答 1查看 127关注 0票数 0

我正在考虑使用flexjson将我的业务对象序列化为android应用程序中的文件,只需使用带有所有默认转换器和对象工厂的JSONSerializer().deepSerialise(myObject)和JSONDeserializer().deserialise(jsonString)即可。

我希望,一旦应用程序发布,对业务模型的任何更改都应该通过在新版本中编写flexjsons转换器和对象工厂来适应,以保持与以前版本的兼容性。

我不确定的是,默认的转换器和对象工厂可以处理哪些更改。也就是说,如果我将一个字段添加到一个类中,并从没有该字段的旧版本反序列化到新类中,它是否会失败,或者新字段是否为null或0(如果是数字)。同样的问题,如果我删除一个字段,会发生什么。

在标准java序列化中,这一切都记录在这里。http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html

但是我找不到flexjson的等效信息,它明确地处理了围绕对象版本控制的问题,有吗?

干杯,菲尔。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 04:36:28

Flexjson将首先查看JSON以查找它包含的所有字段,然后在要反序列化的对象上查找这些字段。因此,向对象添加新字段不会导致反序列化过程失败。新字段将不是从JSON对象填充的(即它将保留在构造函数中设置的值或初始化值)。

如果将来从对象中删除一个字段,Flexjson将不会将该值反序列化到对象中,因为它不会为其找到setter。

因此,您可以将getter/setter函数看作是对JSON的声明,您希望从中得到什么。您不需要序列化/反序列化JSON对象中的所有值。

唯一真正棘手的部分是重命名字段,或者更改字段的类型。可以通过保留较旧的setter并在内部设置该较旧的setter中的新字段来处理重命名字段。您可以将其标记为私有或受保护,以向外部隐藏它,Flexjson仍将使用它。如果你改变了类型,那就麻烦多了。一种选择是保留具有先前类型的旧setter (如setFoo(String)和setFoo(List)),并适应新类型。另一种选择是编写ObjectFactory以将其转换为两种可能的类型。这当然是最难做到的。最后一个选项是,在不更改字段名称的情况下不要执行此操作,并使用其他方法之一进行转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16276296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档