Gson映射密钥对到json [英] Gson Map Key Pair to json
问题描述
我想将此解析为JSON:
I want to parse to JSON this:
Map<Pair<String, Date>, Product>
由于JSON不能具有对具有键,因此它显然给了我这样的信息:
Since JSON cannot have a Pair has key it obviously gives me something like this:
{"android.util.Pair@a24f8432":{"Name:"name","Brand":"brand"....}}
在这一点上,要实现我的目标,我必须创建我的Pair<String, Date>
对象序列化和反序列化方法.
At this point to achieve my goal I'll have to create my Pair<String, Date>
Object Serialize and Deserialize methods.
这是我需要您帮助的地方,我不知道该怎么做.我是否必须创建MyPair
类扩展Pair
并实现JsonSerializer<Pair<String, Date>>
...?
This is where I need your help, I have no idea how to do this. Do I have to create MyPair
class extending Pair
and implementing JsonSerializer<Pair<String, Date>>
...?
所以我正在尝试使用TypeAdapter<T>
,但是没有运气...
So I'm trying to use TypeAdapter<T>
but with no luck...
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时:
But when I register my 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 ... 为什么?
Gives me NullPointerException... Why?
推荐答案
Gson gson = new GsonBuilder()
.registerTypeAdapter(TYPE, new MyTypeAdapter())
.enableComplexMapKeySerialization()
.create();
好,所以我错过了这个重要的选择:
Ok so I was missing this importante option:
.enableComplexMapKeySerialization()
这篇关于Gson映射密钥对到json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!