反序列化通用java对象返回LinkedTreeMap

时间:2018-02-24 07:55:02

标签: java json generics gson

我有一个通用的Java Message对象,由以下json字符串表示:

{
  "type": "Example",
  "processTime": 3.4,
  "payload": 
   {
    "id": "someString",
    "type": "anotherString",
    "message": "yetAnotherString"
  }
}

Java Message对象是通用的。我还有一个名为Event的对象。尝试使用gson将json转换为Message<Event>对象时,返回带有正确json值的Message对象,但嵌套通用对象以某种方式返回为“LinkedTreeMap”对象而不是{ {1}}对象。我知道这与类型擦除有关,但我似乎无法弄清楚如何从json返回Event

这是我的Message<Event>

main()

public class App { public static void main(String[] args) { //The json string to convert into a "Message<Event>" object String jsonString = "{\"type\":\"Example\",\"processTime\":3.4,\"payload\":{\"id\":\"someString\",\"type\":\"anotherString\",\"message\":\"yetAnotherString\"}}"; Message<Event> message = new Message<Event>(); message = message.convertJsonToObject(jsonString, Event.class); System.out.println(message.getClass().getName()); //returns as a "Message" class -- as expected System.out.println(message.getPayload().getClass().getName()); //returns as a "LinkedTreeMap" instead of an "Event" object } } 上课:

Message

public class Message<T> { private String type; private double processTime; private T payload; public Message(String type, double processTime, T payload) { this.type = type; this.processTime = processTime; this.payload = payload; } public Message() { type = null; processTime = 0; payload = null; } public String getType() { return type; } public void setType(String type) { this.type = type; } public double getProcessTime() { return processTime; } public void setProcessTime(double processTime) { this.processTime = processTime; } public T getPayload() { return payload; } public void setPayload(T payload) { this.payload = payload; } public Message<T> convertJsonToObject(String jsonString, Class<T> classType) { GsonBuilder gson = new GsonBuilder(); Type collectionType = new TypeToken<Message<T>>() {}.getType(); Message<T> myMessage = gson.create().fromJson(jsonString, collectionType); return myMessage; } @Override public String toString() { return new Gson().toJson(this); } } 上课:

Event

0 个答案:

没有答案