【发布时间】:2018-07-30 09:12:24
【问题描述】:
我正在使用一个类层次结构,其中一个类定义了一组实例
public class Base {
String id;
String name;
String type;
}
public class Group<T extends Base> extends Base {
Collection<T> elements;
}
还有许多其他类型派生自基类并且可以添加到组中。每种类型都有自己的属性
Gson 默认序列化适用于非组对象,但对于组对象,我需要仅使用基类属性对集合元素进行序列化,并排除所有其他属性。
问题:
- 完成这项工作的最佳方法是什么?
- 如果 Group 也是一个基类,我希望对其所有子类自动完成自定义序列化怎么办?
编辑:
@保罗。我认为你的建议在我的情况下不起作用。 我过度简化了模型。
这里是对模型的更详细的描述。
public interface Node {
BaseObject getAsBaseObject();
}
public class Base {
String id;
String name;
String type;
}
public class BaseObject extends Base implements Node {
String description;
@Override
public BaseObject getAsBaseObject() {
return this;
}
}
public class Group<T extends Node> extends BaseObject {
Collection<BaseObject> elements;
void addElement(T element) {
elements.add(element.getAsBaseObject());
}
}
Node 接口用作复合节点的基础。考虑 Foo 和 Foo 的组...
public interface FooBase extends Node {
}
public class Foo extends BaseObject implements FooBase {
String prop1;
}
public class FooGroup extends Group<FooBase> implements FooBase{
}
假设我有一个 FooGroup,其中包含一些 Foo 和 Foo 组。 我需要序列化对象看起来像这样:
{
"id": "",
"type": "",
"name": "",
"description": " ",
"objects": [
{
"type": "",
"name": "",
"id": ""
},
{
"type": "",
"name": "",
"id": ""
},
{
"type": "",
"name": "",
"id": ""
},
{
"type": "",
"name": "",
"id": ""
}
]
}
我认为@Expose 在这里不起作用,因为描述字段也会在对象集合中公开
我可以通过注册一个自定义的 JsonSerializer 来做到这一点 但这是正确/最简单的方法吗?
如果这是要走的路,有没有办法只注册一个序列化器来处理所有 Group 类派生?
【问题讨论】:
标签: java json serialization gson