4

オブジェクトのリストがあります。たとえば、次のようにします。

List<Timestamp>

各「タイムスタンプ」オブジェクトには他のオブジェクトが含まれ、特に「タグ」オブジェクトがあります。

class Timestamp {
    String time;
    ...
    Tag tag;
    ...
}

現在、すべてのTagオブジェクトは「整数」タイプのIDで識別されます。

class Tag {
    Integer id;
    ...
}

いくつかの理由から、Gsonライブラリを使用して、タイムスタンプリスト全体のJSON表現をファイルに書き込む必要があります。各タグのIDの10進表現が必要な場合もあれば、16進形式のIDが必要な場合もあります。

2つの形式を「切り替える」にはどうすればよいですか?タイムスタンプオブジェクトの全リストを作成するには、次の命令を使用することを検討してください。

ps.println(gson.toJson(timestamps));

また、JSON表現が異なるため、Tagクラスに他のフィールド/タイプ/オブジェクトを追加できません。

4

2 に答える 2

1

それInteger自体には形式がなく、単なる数値です。
16進形式にしたい場合は、のString代わりにを使用する必要がありIntegerます。

于 2013-01-31T17:30:14.370 に答える
1

私はこれが答えだと思います:

  1. Tagクラスのカスタムgsonシリアライザーを記述します。
  2. IDを16進数で出力するタイミングと、IDを10進数で出力するタイミングを示すフラグ変数をTagに追加します。
  3. 新しく追加されたフラグに注意を払うTagクラスにtoString()メソッドを作成します。

カスタムシリアライザー(gson docの例からのバリエーション)

private class TagSerializer implements JsonSerializer<Tag>
{
  public JsonElement serialize(Tag src, Type typeOfSrc, JsonSerializationContext context)
  {
    return new JsonPrimitive(src.toString());
  }
}

カスタムシリアライザーを登録する

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(Tag.class, new TagSerializer());

タグの更新

boolean displayIdInHex = false;

public void setDisplayIdInDecimal()
{
  displayIdInHex = false;
}

public void setDisplayIdInHex()
{
  displayIdInHex = true;
}

public String toString()
{
  ... stuff ...
  if (displayIdInHex)
  {
    ... output id in hex.
  }
  else
  {
    ... output id in decimal.
  }
}

TimeStampはpublicvoidsetDisplayIdInDecimal(){ta​​g.setDisplayIdInDecimal();を更新します。}

public void setDisplayIdInHex()
{
  tag.setDisplayIdInHex();
}
于 2013-01-31T17:38:48.273 に答える