12

こんにちは、次のようなダブル取得データの代わりにintを使用するようにgsonを構成できますか?

{fn: chat, data: {roomId: 1, text: "Some brabble"}}

次のように逆シリアル化するPacketClassを取得しました。

public class DataPacket {
  private String fn;
  private Object p; // will be a StringMap
}

次のようにデコードします。

DataPacket pkg = gson.fromJson(message, DataPacket.class);

タイプ処理を改善するために、DataPacket.pフィールドのデータpojoを取得しました。例:

public class ChatPacket {
  public int roomId;
  public String message;
  public String from;
  // getter & setter
}

データをパケットに解析するには、次のようなBeanMapsを使用します(エラー処理などを削除しました)。

public Object getData(Class<?> pojoClass) {
  pojo = pojoClass.newInstance();
  BeanMap b = new BeanMap();
  b.setBean(pojo);
  b.putAll(this.p);
  pojo = b.getBean();
}

問題は、gsonがroomIdをStringMapで1からdouble 1.0にし、beanmapがそれを整数に解析しようとしてNumberFormatExceptionをスローすることです。これを修正する方法を知っている人はいますか?

ありがとう!

4

1 に答える 1

1

DataPacketクラスを次のように変更するだけでよいと思います

public class DataPacket {
  private String fn;
  private ChatPacket p; // will be a StringMap
}

(オブジェクトをChatPacketに置き換えます)-それがアプリケーションの残りの部分に適している場合。次に、GsonはChatPacketクラスのデータ型を認識し、「1」をintとして特性化します。

編集(コメントで完全なフォーマット機能を使用できないため:-()

Gsonと、次のような低レベルのヘルパーJsonParserを組み合わせて使用​​できます。

String testStr = "{fn: chat, data: {roomId: 1, message: \"Some brabble\"}}";
DataPacket dp = new Gson().fromJson(testStr, DataPacket.class); 
JsonParser parser = new JsonParser(); 
JsonElement e = parser.parse(testStr); 
ChatPacket cp = new Gson().fromJson(e.getAsJsonObject().getAsJsonObject("data"), ChatPacket.class);
于 2012-08-22T06:14:26.747 に答える