【问题标题】:Gson Map Key Pair to jsonGson 将密钥对映射到 json
【发布时间】:2013-09-24 15:46:03
【问题描述】:

我想把这个解析成 JSON:

Map<Pair<String, Date>, Product>

由于 JSON 不能有 Pair has key 它显然给了我这样的东西:

{"android.util.Pair@a24f8432":{"Name:"name","Brand":"brand"....}}

此时,为了实现我的目标,我必须创建我的 Pair&lt;String, Date&gt; Object Serialize 和 Deserialize 方法。

这是我需要你帮助的地方,我不知道该怎么做。我是否必须创建 MyPair 类扩展 Pair 并实现 JsonSerializer&lt;Pair&lt;String, Date&gt;&gt; ...?




编辑:
所以我尝试使用TypeAdapter&lt;T&gt;,但没有运气...

public class MyTypeAdapter extends TypeAdapter<Pair<String, Date>> {

@Override
public Pair<String, Date> read(JsonReader jsonReader) throws IOException {
    if (jsonReader.peek() == JsonToken.NULL) {
        jsonReader.nextNull();
        return null;
    }

    String id = jsonReader.nextString();

    Date evaluated = null;

    try {
        evaluated = mySimpleDateFormat.parse(jsonReader.nextString());
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return new Pair<String, Date>(id,evaluated);
}

@Override
public void write(JsonWriter jsonWriter, Pair<String, Date> stringDatePair) throws IOException {
    if (stringDatePair == null) {
        jsonWriter.nullValue();
        return;
    }
    String output = stringDatePair.first + "," + stringDatePair.second;
    jsonWriter.value(output);
}
}

但是当我注册我的 TypeAdapter 时:

Type TYPE = new TypeToken<Pair<String, Date>>() {}.getType();


 GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(TYPE, new MyTypeAdapter());
    Gson g = builder.create();
    String test = g.toJson(new Pair<String, Date>("123",new Date()));


这个:

builder.registerTypeAdapter(TYPE, new MyTypeAdapter());

给我 NullPointerException... 为什么?

【问题讨论】:

    标签: android json serialization


    【解决方案1】:
     Gson gson = new GsonBuilder()
                    .registerTypeAdapter(TYPE, new MyTypeAdapter())
                    .enableComplexMapKeySerialization()
                    .create();
    

    好的,所以我错过了这个重要的选项:

                .enableComplexMapKeySerialization()
    

    http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/GsonBuilder.html#enableComplexMapKeySerialization%28%29

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 2021-11-20
      • 2019-05-27
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      相关资源
      最近更新 更多