序列化 jackson class 因此字段被视为父数组的未命名元素
Serialize jackson class so fields are treated as unamed elements of parent array
我有一个 json 格式,我正在尝试为其创建一个 jackson 模型对象。 JSON 格式是预定义的。部分格式如下所示:
entities: [
{
id: "",
name: "",
type: "",
...
}
{
id: "",
name: "",
type: "",
...
}
(etc etc)
]
每个 'entity' 对象可能有不同的字段。例如,我可能有一个用户实体、一个帐户实体和一个提供者实体等。JSON 是通用的,但在我的例子中,我正在构建一个特定的模板,我知道我将要创建的每个实体的类型正在创造。我可以做这样的事情并且它会起作用:
public class MyTemplate{
public Entity[] entities;
public MyTemplate(){
entities=new Entity[NUM_ENTITIES];
entities[ENTITY_LOC.User]=new UserEntity();
entities[ENTITY_LOC.Account]=new AccountEntity();
}
public void setUser(UserEntity user){
entities[ENTITY_LOC.User]=user;
}
}
这会正确地 searlize,并且是一个非常丑陋的模型对象。我更喜欢这样的东西:
Public Class MyTemplate{
UserEntity user;
AccountEntity account;
public MyTemplate(){
user=new UserEntity();
account=new AccountEntity();
}
public void setUser(UserEntity user){
this.user=user;
}
}
问题是如何使上述对象序列化以符合预期的 JSON 格式,就好像每个命名字段只不过是命名实体集合中的通用对象一样?我知道我可以覆盖序列化解析器,但是有没有办法只用注释来做到这一点?
无法将第二个代码示例中的 MyTemplate
结构序列化为您提供的 JSON 结构,除非您还编写自定义序列化程序。但是,如果您对 MyTemplate
使用 Entities
的 List
没有问题:
public class MyTemplate {
List<Entity> entities;
// accessor, mutator
}
然后这将序列化到您问题中的 JSON 就好了。您仍然需要编写自定义反序列化器,并且需要 User
和 Account
模型来扩展 Entity
,然后放置确定该父实体中的实体类型 class.
繁重的工作将在您的自定义反序列化器中完成。
Entity
class:
public class Entity {
private String id;
private String type;
private String name;
// accessors, mutators
}
UserEntity
class:
public class UserEntity extends Entity {
// UserEntity specific fields, logic
}
我有一个 json 格式,我正在尝试为其创建一个 jackson 模型对象。 JSON 格式是预定义的。部分格式如下所示:
entities: [
{
id: "",
name: "",
type: "",
...
}
{
id: "",
name: "",
type: "",
...
}
(etc etc)
]
每个 'entity' 对象可能有不同的字段。例如,我可能有一个用户实体、一个帐户实体和一个提供者实体等。JSON 是通用的,但在我的例子中,我正在构建一个特定的模板,我知道我将要创建的每个实体的类型正在创造。我可以做这样的事情并且它会起作用:
public class MyTemplate{
public Entity[] entities;
public MyTemplate(){
entities=new Entity[NUM_ENTITIES];
entities[ENTITY_LOC.User]=new UserEntity();
entities[ENTITY_LOC.Account]=new AccountEntity();
}
public void setUser(UserEntity user){
entities[ENTITY_LOC.User]=user;
}
}
这会正确地 searlize,并且是一个非常丑陋的模型对象。我更喜欢这样的东西:
Public Class MyTemplate{
UserEntity user;
AccountEntity account;
public MyTemplate(){
user=new UserEntity();
account=new AccountEntity();
}
public void setUser(UserEntity user){
this.user=user;
}
}
问题是如何使上述对象序列化以符合预期的 JSON 格式,就好像每个命名字段只不过是命名实体集合中的通用对象一样?我知道我可以覆盖序列化解析器,但是有没有办法只用注释来做到这一点?
无法将第二个代码示例中的 MyTemplate
结构序列化为您提供的 JSON 结构,除非您还编写自定义序列化程序。但是,如果您对 MyTemplate
使用 Entities
的 List
没有问题:
public class MyTemplate {
List<Entity> entities;
// accessor, mutator
}
然后这将序列化到您问题中的 JSON 就好了。您仍然需要编写自定义反序列化器,并且需要 User
和 Account
模型来扩展 Entity
,然后放置确定该父实体中的实体类型 class.
繁重的工作将在您的自定义反序列化器中完成。
Entity
class:
public class Entity {
private String id;
private String type;
private String name;
// accessors, mutators
}
UserEntity
class:
public class UserEntity extends Entity {
// UserEntity specific fields, logic
}