Is it a good choice to define my own JSON util class like this?
Are you changing the fields that you expose from your objects depending on certain conditions? 

On the whole it would be best to use reflection only as a last gasp. Gson works fine with collections in general see the documentation over at Google.

If you want to exclude some fields from serialization then you can use the @Expose annotation, as documented here. This requires you to annotate all fields that you want to serialize with the @Expose annotation, and to use a builder to instantiate your Gson Object like so:

Gson gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();


In general try to limit how much you are working with the type Object and reduce as far as possible your use of reflection.