我正在使用 Genson 将我的 android 应用程序中的 json 序列化 + 反序列化为多态对象。虽然 JSON 来自多种来源,但我不能保证 @class 元数据将是 json 中的第一个行项目。遍历 Genson 代码并编写测试用例,看起来 @class 元数据必须是字典中的第一个条目。
有没有人幸运地解决了这个限制?是时候切换到其他东西了,如果是,是什么?
public class Message {
Payload payload;
// getters & setters
}
public abstract class Payload {
//
}
public class Notification1 extends Payload {
String text;
// getters & setters
}
public class Notification2 extends Payload {
String otherText
// getters & setters
}
String correctOrder = {"@class":"Message","payload":{"@class":"Notification1","text":"Text"}}
String modifiedOrder = {"@class":"Message","payload":{"text":"Text", "@class":"Notification1"}}
Genson g = Genson.Builder()
.addAlias("Notification1", Notification1.class)
.addAlias("Notification2", Notification2.class)
.useRuntimeType(true)
.useClassMetadata(true)
.useMetadata(true)
.useFields(false)
.useIndentation(false)
.create();
g.deserialize(correctOrder, Message.class) // This works
g.deserialize(modifiedOrder, Message.class) // This barfs with the error: com.owlike.genson.JsonBindingException: Could not deserialize to type class com.ol.communication.messages.Message