使用GSon将匿名的Java对象类型转换为JSON

8
有没有可能使用Gson或其他Java库将匿名对象类型序列化为JSON?
Object objResult = new Object() {
                boolean success = true;
                String  email="mail@gmail.com";
            };

String jsonstr = gson.toJson(objResult);

在这个例子中,字符串jsonstr返回一个null值。

嗯,它并不真正是“匿名”的,因为对象会随身携带其身份。但我不知道有什么工具包可以破解它。(当然,一个人可以很容易地编写代码以生成所需的映射并将其序列化——比“破解”这个类要容易得多。) - Hot Licks
所以没有可能 :p - AHmedRef
2个回答

9
Gson不支持该功能。从用户指南中可以了解到:
“与内部类、匿名类和局部类中外部类对应的字段将被忽略,不包括在序列化或反序列化中。”
您可以使用表示匿名类型超类的Class(或其他Type)来描述使用重载的toJson(Object,Type)方法进行序列化的内容,但仍会丢失在匿名子类中定义的任何新字段。(显然,对于Object,这没有任何作用,因为Object没有字段)

5
这个代码让我出现在了一张地图上:new HashMap<String, Object>() {{put("key", "value");}} 序列化为 null。 - Andrew Rueckert

1
如果你使用 MyClass(){{}} 内联语法,请使用 Gson.toJson(obj, type) 重载方法。
MyClass obj = new MyClass(){{}};
new Gson.toJson(obj, obj.getClass().getSuperclass())

匿名类名称包含 $ 字符。因此,要获取精确的类,请使用

Type type = obj.getClass();
while(type.toString.Contains("$")) type = ((Class)type).getSuperclass();
new Gson.toJson(obj, type);

这仅适用于单个深度。MyClass(){{ this.other = MyOtherClass() {{}}; }} 仍然无法工作。 - andras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接