我想發送消息(使用RabbitMQ,但我認爲這不重要)。消息文本在Json中。我想在一條消息中發送關於兩個類的信息。在偵聽器網站上,我想使用Gson反序列化消息,以便再次獲取我的對象。如何在一個Json消息中發送不同類的對象,以便可以使用Gson對它們進行反序列化?
一個對象是一個簡單對象,第二個對象是一個簡單對象列表。我找不到如何連載兩個不同的對象變成一個JSON,所以我裝在他們的地圖,並提出了消息,這個地圖的:
A a = new A();
ArrayList<B> bList = new ArrayList<B>();
bList.add(new B());
bList.add(new B());
HashMap<String, Object> map = new LinkedHashMap<>();
map.put("A", a);
map.put("B", bList);
String messageText = gson.toJson(map);
如果我現在想deserialise消息:
HashMap<String, Object> sentItems = gson.fromJson(messageText, HashMap.class);
A a = (A) sentItems.get("A");
Collection<B> bList = (Collection<B>) sentItems.get("B");
我從符合get("A")
一個例外:
com.google.gson.internal.StringMap cannot be cast to A.
我能解決這個問題,或者我應該遵循一些其他方法來獲得我想要什麼?
編輯:
的錯誤是相同的,如果我告訴型GSON我想用:
Type type = new TypeToken<HashMap<String, Object>>() {}.getType();
HashMap<String, Object> sentItems = gson.fromJson(argument.getValue(), type);
GSon如何知道你想要一個'A'的實例作爲映射值?創建一個具有'a'和'b'作爲適當類型的實例變量的*類*。 –
一種選擇是將帶有對象的JSON數組發送到數組中,讀取JSON數組,然後反序列化各個數組元素;我會知道如何與傑克遜做但不是Gson ...你需要知道如何從JsonElement進行反序列化。 – fge
@Marko Topolnik你是對的,但添加類型(見編輯)沒有幫助。我犯了同樣的錯誤。 – nuoritoveri