0

これを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 が発生します...なぜですか?

4

1 に答える 1

0
 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

それが役に立てば幸い!

于 2013-09-25T10:44:35.900 に答える