【发布时间】:2014-02-08 03:52:12
【问题描述】:
我得到错误:
Exception in thread "main" com.google.gson.JsonParseException:
Expecting object found: "com.shagie.app.SimpleMap$Data@24a37368"
当尝试反序列化使用非平凡键的 Map 时:
package com.shagie.app;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.HashMap;
public class SimpleMap {
public static void main(String[] args) {
Wrapper w = new Wrapper();
w.m.put(new Data("f", 1), new Data("foo", 3));
w.m.put(new Data("b", 2), new Data("bar", 4));
GsonBuilder gb = new GsonBuilder();
gb.setPrettyPrinting();
Gson g = gb.create();
String json = g.toJson(w);
System.out.println(json);
w = g.fromJson(json, Wrapper.class);
System.out.println(w.m.isEmpty());
}
static public class Wrapper {
HashMap<Data, Data> m = new HashMap<Data, Data>();
}
static public class Data {
String s;
Integer i;
public Data(String arg, Integer val) { s = arg; i = val; }
}
}
这会序列化为 json:
{ “米”:{ “com.shagie.app.SimpleMap$Data@24a37368”:{ “s”:“富”, “我”:3 }, “com.shagie.app.SimpleMap$Data@66edc3a2”:{ “s”:“酒吧”, “我”:4 } } }可以看到尝试序列化的密钥,但肯定不是可以反序列化的方式。
如何序列化这个对象以便反序列化?
【问题讨论】:
-
虽然我确实找到了一个可行的答案,但我不相信它是最佳解决方案,或者如果我遗漏了 API 中的某些内容会导致 GSON 只做我想做的事情真的很想要。
标签: java json serialization deserialization gson