【发布时间】: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<String, Date> Object Serialize 和 Deserialize 方法。
这是我需要你帮助的地方,我不知道该怎么做。我是否必须创建 MyPair 类扩展 Pair 并实现 JsonSerializer<Pair<String, Date>> ...?
编辑:
所以我尝试使用TypeAdapter<T>,但没有运气...
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