标题翻译
Gson can not cast "Object"class in my object
问题
我正在使用 Gson 将我的类转换为 Json,我有一个名为 payload 的字段,它必须是我的类本身。
我的类定义如下:
public class MyClass {
private Long id;
private String name;
private Object payload;
}
但是当我按照以下方式使用它时:
MyClass myClassObj = new MyClass();
myClassObj.setId(1L);
myClassObj.setName("Example");
myClassObj.setPayload(myClassObj);
然后我查看结果:
String result = new Gson().toJson(myClassObj);
结果中并没有包含 payload 数据对象。
{"id":1, "name":"Example"}
我需要像这样的结果:
{"id":1, "name":"Example", "payload": {"id":1, "name":"Example"}}
提前感谢您的帮助。任何帮助都将是有用的。
英文翻译
I'm using Gson to cast my class to Json, I have a field called payload
which must to be my class itself.
My class is as follow:
public class MyClass {
private Long id;
private String name;
private Object payload;
}
But when I use it as follow:
MyClass myClassObj = MyClass()
myClassObj.setId(1L);
myClassObj.setName("Example");
myClassObj.setPayload(myClassObj);
And I see the result of:
String result = new Gson().toJson(myClassObj);
The result does not contain payload data object.
{"id":1, "name":"Example"}
I need something like:
{"id":1, "name":"Example", "payload": {"id":1, "name":"Example"}}
Thanks in advance.
Any help will be useful.
答案1
得分: 0
你需要将其更改为以下定义:
public class MyClass {
private Long id;
private String name;
private MyClass payload = null;
}
Gson会序列化那些不是瞬态的参数。对象中没有你想要序列化的 "id" 和 "name" 参数,而是 MyClass 中有这些参数。请确保 payload 的默认值为 null,否则在将其序列化为 JSON 时可能会出现无限循环的问题。
英文翻译
You will need to change it to be defined as such
public class MyClass {
private Long id;
private String name;
private MyClass payload = null;
}
Gson serialized parameters that are not transient. Object does not have the "id" and "name" parameters you are wanting to serialize. MyClass does. Ensure that payload's default value is null otherwise you may have an infinite loop on your hands when serializing to json.
答案2
得分: 0
我找到了一个解决方案,Object 可以是任何东西,所以在设置我的类的 payload 之前,我进行了以下操作:
myClassObj.setPayload(new Gson().fromJson(myClassObj.toString(), myClassObj.class));
注意:
在我的 MyClass 类中,我已经重写了 toString 方法如下:
@Override
public String toString() {
return new Gson().toJson(this);
}
如果有更好的解决方案,欢迎发表。
英文翻译
I found a solution, Object can be anything, so before to set payload of my class I made the follow:
myClassObj.setPayload(new Gson.fromJson(myClassObj.toString(), myClassObj.class);
Note:
In MyClass I have override toString method as follow:
@Override
public String toString() {
return new Gson().toJson(this);
}
If someone has a better solution, feel free to post it.
专注分享java语言的经验与见解,让所有开发者获益!
评论