2011-08-05 64 views
3

有没有办法配置gson忽略未知的枚举值?对于 例如Gson忽略未知的枚举值

在我的客户端代码有一个枚举设备类型有2枚举值:PC, MOBILE

但是,当一个服务器被发送另一种类型的,例如MAC作为另一 设备类型。我如何配置我的gson deserilalizer来设置 DeviceType = null而不是抛出异常?

感谢,

肖恩

+0

如果你不知道合法值,也许你不应该使用枚举?或者,相反,如果值是固定的,那么发送错误值的人应该修复它们的代码而不发送它们? – StaxMan

+1

这些值是每个版本的固定集合。这不会经常更改,但可以在新版本中添加一些。这是处理协议缓冲区非常好,解析器只是忽略该值并设置为未知字段。我希望gson提供类似于开箱即用的东西。 –

+0

如果需要,您可能应该稍后使用String和辅助方法以获取Enum。另外,如果Gson确实支持设置方法(不仅仅是字段),你可以在那里进行转换......但它不(但)? – StaxMan

回答

2

您可以轻松地编写自定义JsonDeserializer忽略未知值。阅读更多here。 为起点,看看源GSON源代码,类com.google.gson.DefaultTypeAdapters.EnumTypeAdapter

0

我不是100%肯定这是否会工作,但你可能在你的枚举覆盖默认实现声明static T valueOf(String)方法一个为未知值返回null而不是IllegalArgumentException。

documentation表示将使用重载静态实现。

然后它只是取决于Gson如何处理该方法的结果(假设Gson甚至使用该方法进行解析),但这是一个简单的解决方法,可能值得一试。