Is there a way to avoid reflection in Gson? I know that when you will use registerTypeAdapter you can avoid it, but if you use @SerializedName("name") annotation on class member, can you avoid id too?
            Asked
            
        
        
            Active
            
        
            Viewed 5,303 times
        
    3
            
            
         
    
    
        Sotirios Delimanolis
        
- 274,122
- 60
- 696
- 724
 
    
    
        Szymon Haxik
        
- 121
- 1
- 8
- 
                    1Everything serializers do involves reflection. To use the `TypeAdapter` Gson has to determine the type of your object. Can you clarify why you need this, what you're trying to achieve? – Sotirios Delimanolis May 12 '16 at 21:32
- 
                    And aren't runtime annotations determined using reflection? – Christopher Schneider May 12 '16 at 21:35
- 
                    1I think Soltirios wants a way to exclude a field inspection through reflexion (performance or to avoid infinite cycles). If that's the case check documentation or this link: http://stackoverflow.com/questions/4802887/gson-how-to-exclude-specific-fields-from-serialization-without-annotations – corlaez May 12 '16 at 21:39
- 
                    @SotiriosDelimanolis Reflection is very slow on android, this is why I want to avoid it ;). I saw an article, where authors wrote, that using TypeAdapter and custom deserializers we can avoid reflection. But I'm just curious that there is another way to achieve that – Szymon Haxik May 12 '16 at 21:44
- 
                    @ChristopherSchneider it depends on annotation implementation. Some of anntotations use reflection, but some of them use code injection. – Szymon Haxik May 12 '16 at 21:45
- 
                    1Yes reflection is slow, but you should be doing this work on a background thread so it typically not that big of a deal. – cyroxis May 12 '16 at 21:53
- 
                    @cyroxis there is no way to do it on main thread, because I'm doing network calls. On android reflection is a lot slower than on pure java, there are a lot of articles about that. My question was simple - Do `@SerializedName` uses reflection or not? – Szymon Haxik May 12 '16 at 22:17
- 
                    1Yes it uses reflection. Yes reflection is slower on Android. I am using Gson in an Android project and deserializing 10k+ entities from single network calls. It is typically not a big issues if you don't block the main thread. – cyroxis May 12 '16 at 22:24
1 Answers
1
            
            
        You can use Autovalue and Autovalue-gson that will create a reflection free adapter for you.
 
    
    
        mbonnin
        
- 6,893
- 3
- 39
- 55