2011-08-05 6 views
3

gsonが未知の列挙型の値を無視するように設定する方法はありますか? PC、 モバイルGsonが未知の列挙値を無視する

しかし、サーバが別の DeviceTypeをとして例えば別のタイプのMACを送信されるときに:私のクライアントコードで 例

について列挙DeviceTypeを2列挙型の値を持つがあります。 gson deserilalizerで、例外をスローする代わりに DeviceType = nullを設定するにはどうすればよいですか?

おかげで、

ショーン

+0

正当な値がわからない場合は、enumを使用しないでください。逆に、値が固定されていれば、悪い値を送る人は、コードを送信しないように修正する必要があります。 – StaxMan

+1

値は、バージョンごとの固定セットです。これは頻繁に変わることはありませんが、新しいバージョンではいくつか追加できます。これはプロトコルバッファで非常にうまく処理され、パーサはその値を無視して不明なフィールドに設定します。私はgsonがそれのような何かを提供することを願っています。 –

+0

これで、必要に応じてStringとヘルパーメソッドを使用して、Enumを取得する必要があります。また、Gsonが(フィールドだけでなく)setメソッドをサポートしていれば、あなたはそこで変換を行うことができます...しかしそれは(まだですか?) – StaxMan

答えて

2

あなたは簡単に未知の値を無視するカスタムJsonDeserializerを書くことができます。続きを読むhere。出発点のために 、クラスcom.google.gson.DefaultTypeAdapters.EnumTypeAdapter

0

、ソースgsonのソースコードを見て、私はこれがうまくいく場合は100%わからないんだけど、あなたはおそらくデフォルトの実装をオーバーライドするためにあなたの列挙にstatic T valueOf(String)メソッドを宣言することができIllegalArgumentExceptionではなく、未知の値に対してnullを返すものが1つあります。

documentationは、オーバーライドされた静的実装が使用されることを示しています。

これは、Gsonがそのメソッドの結果をどのように処理するかによって異なります(Gsonがそのメソッドを解析に使用すると仮定しても)。しかし、それはショットに値する可能性のある簡単な回避策です。

関連する問題