2014-12-11 2 views
1

Я хочу сериализовать Map<String,Object> в JSON с Джексоном и обратно. Тип объекта может состоять из нескольких компонентов. Но при сериализации назад я думаю, что Джексон не знает, какой тип объекта имеет. Таким образом, он сериализуется до LinkedHashMa р. Можно ли добавить информацию, которая набирает объект?Сериализовать карту <String, Object> в Json и обратно

Вот мой пример программы:

TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {}; 

     ObjectMapper m = new ObjectMapper(); 
     JsonFactory jf = new JsonFactory(); 

     Map<String, Object> map = new HashMap<String, Object>(); 

     UserBean bean1 = new UserBean(); 

     bean1.setId("1"); 
     bean1.setName("test"); 

     map.put("user", bean1); 

     String test = m.writeValueAsString(map); 

     map = m.readValue(test, typeRef); 

     for (final Map.Entry<String, Object> entry : map.entrySet()) 
     { 
      final String key = entry.getKey(); 

      if (key.matches("user")) 
      { 
       final UserBean userBean = (UserBean)map.get(key); 
      } 
     } 

public class UserBean { 
    String id; 
    String name; 

    public UserBean() 
    { 
     super(); 
    } 

    public void setId(String id){ 
     this.id = id; 
    } 

    public String getId(){ 
     return this.id; 
    } 

    public void setName(String name){ 
     this.name = name; 
    } 

    public String getName(){ 
     return this.name; 
    } 
} 

ответ

0

Попробуйте сделать карту, как показано ниже;

Map<String, UserBean> map = new HashMap<String, UserBean>(); 

(Если Java 7 вы можете использовать использовать оператор алмазную без указания типа как новый HashMap <>()).

Вы также можете попробовать использовать @JsonDeserialize с помощью jackson-annotations

+0

Спасибо за ваш ответ, но объект также может быть другого типа диффере из UserBean (например AppBean). Тогда Джексон не знает, какой тип объекта имеет. Итак, если ключ «Приложение», то я хочу отдать его в AppBean. – MichaelWichtl