如何进行(递归?)自定义反序列化

时间:2019-06-03 15:03:02

标签: java json object

我正在使用自定义反序列化功能,但是我将需要比我更好的大脑来解决此问题。

为简化: 我有一个json文件,一个实体,一个反序列化类和一个主

着重于EntityDeserialization(作为参数实体的searchEntitie函数)和Main(实体变量)

Entity.json (rootEntity是一个Entity对象)

[
  {
    "name": "BFA",
    "entityType": "secteur",
    "rootEntity": ""

  },
    {
    "name": "IT",
    "entityType": "service",
    "rootEntity": ""

  },
  {
    "name": "EX",
    "entityType": "offre",
    "rootEntity": "BFA"
  }
]

实体类

@JsonDeserialize(using = EntityDeserialization.class)
public class Entity {
    private String name;
    private String entityType;
    private Entity rootEntity;

EntityDeserialization

 public Entity deserialize(JsonParser jp, DeserializationContext ctxt)
            throws IOException {
        JsonNode node = jp.getCodec().readTree(jp);
        String name =  node.get("name").asText();
        String entitype = node.get("entityType").asText();
        String rootEntity = node.get("rootEntity").asText();
        Entity entity = new Entity();
        entity = entity.searchEntity(entities, rootEntity);
        return new Entity(name, entitype,entity);
    }

主要

 public static void main(String[] args) throws FileNotFoundException {
        com.fasterxml.jackson.databind.ObjectMapper mapper = new ObjectMapper();
        mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
        TypeReference<List<User>> typeReferenceUser = new TypeReference<>() {};
        TypeReference<List<Entity>> typeReferenceEntity = new TypeReference<>() {};
        FileInputStream inputStreamUser = new FileInputStream("C:\\Users\\oraph\\Desktop\\user.json");
        FileInputStream inputStreamEntity = new FileInputStream("C:\\Users\\oraph\\Desktop\\entity.json");
        try {
           List<User> users = mapper.readValue(inputStreamUser,typeReferenceUser);
           List<Entity> entities = mapper.readValue(inputStreamEntity,typeReferenceEntity);
...

这里有问题: 我打算在EntityDeserialization searchEntity(List entity, String rootEntity)中使用我的函数,该函数主要且正在填充中。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,具有两个连续的反序列化。一种是填充实体列表,另一种是用该列表构建ENtity对象。