我正在处理传入的json字符串,并希望使用gson将它们反序列化为类型化的pojo对象。但是,推送字符串的服务器可以发送不同类型的对象—尽管类型是在json负载中定义的。
看下面两个json字符串,其中我有一个tradeevent和一个errorevent对象(还有其他5种类型,如settlementevent、paymentevent等)。
我如何将其反序列化到gson中的实际pojo(可能使用泛型),因为我直到运行时才知道类型-正如您所看到的,第二级元素包含实际的对象类型(tradeevent、errorevent等)。
还应该添加-在pojo方面,我是否将第二个元素(即tradeevent、errorevent)表示为对象或字符串?
{
"data": {
"tradeEvent": {
"tradeId": "2d28d464-a746-4c58-b19f-b586d2f5d015",
"status": 2,
"eventDescription": "Trade Settled"
}
}
}
{
"data": {
"errorEvent": {
"Uuid": "3a36ae26-ba41-40d5-b11d-d8d842eb2356",
"failureCode": 2, "tradeId": "2d28d464-a746-4c58-b19f-b586d2f5d015", "errorMessage": "Returned error: Exception while processing transaction: trade not matched"
}
}
}
谢谢你的指导。
1条答案
按热度按时间ipakzgxi1#
实现数据 Package 类以提取事件对象可能是最简单的方法:
我相信,这种方法比根据您的需要调整runtimetypeadapterfactory更容易实现。但是,实现自定义类型适配器可能会在读取时检测到不明确的字段,因此不会反序列化每个字段(这会花费更多的堆)。
上述方法将通过以下测试: