2017-06-17 124 views
0

我有這樣的JSON字符串..GSON實例創建者創建的實例,但字段爲空

{"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是一個接口。我用Gson註冊了一個InstanceCreator,這樣我就可以做一個BookingRoom類的新實例。

我的理解是,一旦我給GSON從InstanceCreator鉤空白情況下,它應該能夠從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] 
] 
] 

回答

0

InstanceCreator類似乎只解決了「實例創建」問題,即構造函數問題。這適用於類爲具體類時,但該具體類沒有無參數構造函數的情況。

在一個接口的情況下,存在的另一個問題爲好。 Gson依賴於成員變量來找出要序列化和反序列化的字段列表。在接口的情況下,Gson得出結論,有0個字段需要反序列化。

所以,一旦實例創建者創建了一個具體的實例,還GSON不會複製任何字段。這是因爲它已經通過界面上的反射構建了字段列表。

的解決方案是使用一個JsonDeserializer