我有这个 JSON 字符串..
{"id":0,"entryDate":1497716236038,"guestName":"a","bookingRooms":[{"id":0,"bookingId":0,"roomId":2,"startDate":0,"endDate":0}]}
这是Gson的解析结果..
Booking [id=0, entryDate=Sat Jun 17 21:47:16 IST 2017,
guestName=a, bookingRooms=[
BookingRoom [id=null, bookingId=null, roomId=null, startDate=null, endDate=null]
]
]
如您所见, BookingRoom
的所有字段实例结果是null
。但是,输入的字段至少为零。
在我的类型结构中,List<IBookingRooms>
在Booking
类是一个接口(interface)。我注册了InstanceCreator
与 Gson 一起,这样我就可以创建 BookingRoom
的新实例类。
我的理解是,一旦我从 InstanceCreator Hook 中给 Gson 空白实例,它应该能够设置 Json 字符串中的字段。然而,这并没有发生。
我错过了什么吗?您能建议如何解决这个问题吗?
第二个问题是,即使输入 JSON 字符串中的 bookingRooms 为空数组,解析后的列表仍然具有相同的一项,且所有字段均为空!
JSON 字符串..
{"id":0,"entryDate":1497716236038,"guestName":"a","bookingRooms":[]}
List
中仍然有一个空实例!
Booking [id=0, entryDate=Sat Jun 17 21:47:16 IST 2017,
guestName=a, bookingRooms=[
BookingRoom [id=null, bookingId=null, roomId=null, startDate=null, endDate=null]
]
]
最佳答案
InstanceCreator
类似乎只能解决“实例创建”问题,即构造函数问题。当该类是具体类,但该具体类没有无参数构造函数时,这适用。
对于接口(interface)来说,还存在另一个问题。 Gson 依靠成员变量来确定要序列化和反序列化的字段列表。对于接口(interface),Gson 得出结论,有 0 个字段需要反序列化。
因此,一旦实例创建者创建了具体实例,Gson 仍然不会复制任何字段。这是因为它通过接口(interface)反射构建了字段列表。
解决方案是使用 JsonDeserializer
。
关于java - Gson Instance Creator 创建了实例,但字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44606967/