【发布时间】:2011-05-31 16:04:37
【问题描述】:
我想使用 GSON 将下面的示例类序列化为 JSON。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.LinkedHashMap;
public class Example
{
private LinkedHashMap<String,Object> General;
private static final String VERSION="Version";
private static final String RANGE="Range";
private static final String START_TIME="Start_Time";
private static final String END_TIME="End_Time";
public Example() {
General = new LinkedHashMap<String,Object>();
General.put(VERSION, "0.1");
LinkedHashMap<String,String> Range = new LinkedHashMap<String, String>();
Range.put(START_TIME, "now");
Range.put(END_TIME, "never");
General.put(RANGE, Range);
}
public String toJSON() {
Gson gson = new GsonBuilder().serializeNulls().create();
return gson.toJson(this);
}
}
我希望得到以下输出:
{"General":{"Version":"0.1","Range":{"Start_Time":"now","End_Time":"never"}}}
但是调用函数toJSON()会返回
{"General":{"Version":"0.1","Range":{}}}
似乎 GSON 无法序列化 Map Range 内的 Map General。这是 GSON 的限制还是我在这里做错了什么?
【问题讨论】:
-
如果其他答案正确且默认 Map 序列化程序无法处理嵌套地图,我会向 GSON 团队提交错误报告。对我来说,这似乎是非常糟糕的默认值;至少它应该抛出异常而不是悄悄吞下内容。
-
+1 @StaxMan 好像是这样。我之前看到过这个,想出了一些解决方法。如果有某种方法可以做到这一点,那么值得记录。