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

Serialization flexjson和版本控制:flexjson如何适应变化?,serialization,deserialization,flexjson,Serialization,Deserialization,Flexjson,我正在考虑使用JSONSerializer().deepSerialise(myObject)和JSONDeserializer().deserialise(jsonString)与所有默认转换器和对象工厂一起,将我的业务对象序列化到android应用程序中的文件中 我希望,一旦应用程序发布,业务模型的任何更改都应该通过在新版本中编写flexjsons转换器和对象工厂来适应,以保持与以前版本的兼容性 我不确定的是,默认的转换器和对象工厂可以应对哪些变化。 i、 e如果我向一个类添加一个字段,并从

我正在考虑使用JSONSerializer().deepSerialise(myObject)和JSONDeserializer().deserialise(jsonString)与所有默认转换器和对象工厂一起,将我的业务对象序列化到android应用程序中的文件中

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

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

在标准java序列化中,这些都记录在这里。。

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

干杯,
Phil.

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

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

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


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

我可以问一下,如果在json中添加了一个额外的字段,而该字段在对象中不存在,FlexJSON反序列化是否会失败?它只会忽略该字段。感谢您让我知道。