2016-11-05 47 views
6

Projemizde çalışırken bir şeyler merak ediyordum. Google'dan GSON API'sı, kurucuları serileştirmek istediğiniz JSON'lardan kullanıyor mu? Örneğin, örneğin:Java - Google'ın GSON'u kurucu kullanıyor mu?

Çalışan bir nesnesine dönüştürmek istediğim bir JSON Dizesi var. Çalışanın nesnesi, bazı denetimleri parametrelere uygulayan bir kurucuya sahiptir (örneğin, kimliği> 0'dır). JSON'ları serileştirmek için aşağıdaki kodu kullanıyoruz. Ancak bu kurucu JSON'u Çalışan'a serpiştirirken bile çağrılıyor mu? GSON için

Bağlantı: https://github.com/google/gson

DÜZENLEME: Yani kırılma noktaları denedikten sonra ben çağrılmaz yapıcı anladım. Her neyse onu anlamanın bir yolu var mı? GSON Jackson veya Java Persistence API (JPA) gibi

/** 
* The GSON class to help you create and de-serialize the JSON objects. 
*/ 
Gson gson = new Gson(); 

/** 
* Convert JSON to an object. 
* @param json The JSON to convert. 
* @param cls The class to convert to. 
* @return The converted JSON to object. 
*/ 
public Object jsonToObject(String json, Class<?> cls) { 
    return gson.fromJson(json, cls); 
} 
+2

Yapıcıya bir kesme noktası koyup kodu ayıklayın, değil mi? –

+0

@RC. Evet haklısın, ben sadece test ettim ve kurucu çağırılmadı. – Guido

+1

Nesneyi başlatmak için boş yapıcı kullandığını ve okuma alanlarının doğrudan yansıma kullanılarak ayarlanacağını varsayardım. – EpicPandaForce

cevap

7

Kütüphaneler genellikle bir nesne örneğini ve yansıma yoluyla kendi alanlarını belirlemek için bir no-argüman (varsayılan) construtor kullanın. GSON'un daha yeni sürümlerinde, artık bir varsayılan kurucu bildirmek zorunda değilsiniz, bkz. here.

GSON'da belirli bir kurucuyu çağırmak isterseniz, daha önce belirtilen here gibi bir özel JsonDeserializer uygulayabilirsiniz.

Jackson gibi diğer kitaplıklarda, temel uzman kurucu çağrısının yerini almanıza izin veren (GSON does gibi) alanlar yerine, serilerin serileştirmeyi tanımlayabilirsiniz.