2011-03-22 12 views

回答

2

那么,取决于如何完成反序列化。如果该对象首先使用无参数构造函数创建,然后通过设置器或反射设置这些字段,那么我会说这应该起作用。在这种情况下,对其他对象的每个引用都将为null,而原始类型获取它们的默认值(对于数字0,对于布尔值false等)

+0

这仍然是一个问题。在老客户中,我会得到一个有新fieds的gson字符串。他们抛出一个IllegalArgumentException – Jeb 2011-03-22 13:04:03

+0

你可以发布IllegalArgumentException的堆栈跟踪吗?它可能是一些不应该为空的字段。 – Thomas 2011-03-22 13:10:45

+0

我的错误。双重检查,它确实按照你描述的方式工作。在使用GSON之前,我忘记将字符串替换为较新的类。 – Jeb 2011-03-22 14:00:46

0

您可以使用XStream将(de)序列化为JSON,他们如何应对新的领域:http://x-stream.github.io/faq.html#Serialization_newer_class_versions

那么简单的答案是:引用将是空引用,元将保持他们得到了值构造

+0

我可以用GSON吗?我的项目使用GSON,我想继续使用这个jar(除非我必须转换为其他选择) – Jeb 2011-03-22 12:29:02

+0

“如果从类中删除一个字段,则反序列化包含该字段的旧版本将导致异常。所以这意味着我将不得不升级我所有的客户。我想找到一个解决方案来避免它。 10x – Jeb 2011-03-22 13:00:12

+0

在这种情况下,您可以使用@Since注释,该注解专为您的案例设计:http://sites.google.com/site/gson/gson-user-guide#TOC-Versioning-Support – 2011-03-22 13:47:08

相关问题