List and java.lang.ClassCastException: com.google.gson.internal.StringMap











up vote
0
down vote

favorite












Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question
























  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 at 15:28















up vote
0
down vote

favorite












Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question
























  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 at 15:28













up vote
0
down vote

favorite









up vote
0
down vote

favorite











Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?










share|improve this question















Below my function,



public <T> List<T> jsonToListBean(String json, Class<T> clazz) {
Gson gson = new Gson();
Type listType = new TypeToken<List<T>>(){}.getType();
List<T> returnValue = gson.fromJson(json, listType);
return returnValue;
}


but the system returns this exception:



java.lang.ClassCastException: com.google.gson.internal.StringMap



I notice also that if I use the following line code



Type listType = new TypeToken<ArrayList<ShapeBean>>(){}.getType();


it works, but my target is to be absolutly as generic as possible to make my code more efficient.



How should i change my code to make usable also passing the type "T" instead the "ShapeBean"?







java json gson javabeans classcastexception






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 19 at 15:40

























asked Nov 19 at 14:26









rugby82

159213




159213












  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 at 15:28


















  • I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
    – Thomas
    Nov 19 at 14:34






  • 1




    Possible duplicate of Gson TypeToken with dynamic ArrayList item type
    – kan
    Nov 19 at 14:42










  • it does not solve my problem
    – rugby82
    Nov 19 at 14:53










  • How you are calling jsonToListBean(..)?
    – Ashish Patil
    Nov 19 at 15:04










  • List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
    – rugby82
    Nov 19 at 15:28
















I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
– Thomas
Nov 19 at 14:34




I'm not really familiar with GSON but you could try to implement some method of TypeToken that makes use of clazz or create listType yourself. One thing we're doing with Jackson is Class<? extends Object> arrayClass = Array.newInstance( clazz, 0 ).getClass() ,pass arrayClass to Jackson and finally return Arrays.asList( parsedArray ) where parsedArray is what Jackson returns. Something similar might be possible with GSON - if you need that fallback.
– Thomas
Nov 19 at 14:34




1




1




Possible duplicate of Gson TypeToken with dynamic ArrayList item type
– kan
Nov 19 at 14:42




Possible duplicate of Gson TypeToken with dynamic ArrayList item type
– kan
Nov 19 at 14:42












it does not solve my problem
– rugby82
Nov 19 at 14:53




it does not solve my problem
– rugby82
Nov 19 at 14:53












How you are calling jsonToListBean(..)?
– Ashish Patil
Nov 19 at 15:04




How you are calling jsonToListBean(..)?
– Ashish Patil
Nov 19 at 15:04












List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
– rugby82
Nov 19 at 15:28




List<ShapeBean> listaBean = jsonToListBean(jsonMessage, ShapeBean.class);
– rugby82
Nov 19 at 15:28












1 Answer
1






active

oldest

votes

















up vote
0
down vote













Solved. Thanks to kan's link below the code:



public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

List<T> lst = new ArrayList<T>();
try {
// Consuming remote method
JsonParser parser = new JsonParser();
JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

for(final JsonElement json: array){
Gson g = new Gson();
T entity = g.fromJson(json, clazz);
lst.add(entity);
}
} catch (Exception e) {
e.printStackTrace();
} return lst;
}


check also this:
Gson TypeToken with dynamic ArrayList item type






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53376727%2flisttype-and-java-lang-classcastexception-com-google-gson-internal-stringmap%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    Solved. Thanks to kan's link below the code:



    public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

    List<T> lst = new ArrayList<T>();
    try {
    // Consuming remote method
    JsonParser parser = new JsonParser();
    JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

    for(final JsonElement json: array){
    Gson g = new Gson();
    T entity = g.fromJson(json, clazz);
    lst.add(entity);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } return lst;
    }


    check also this:
    Gson TypeToken with dynamic ArrayList item type






    share|improve this answer

























      up vote
      0
      down vote













      Solved. Thanks to kan's link below the code:



      public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

      List<T> lst = new ArrayList<T>();
      try {
      // Consuming remote method
      JsonParser parser = new JsonParser();
      JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

      for(final JsonElement json: array){
      Gson g = new Gson();
      T entity = g.fromJson(json, clazz);
      lst.add(entity);
      }
      } catch (Exception e) {
      e.printStackTrace();
      } return lst;
      }


      check also this:
      Gson TypeToken with dynamic ArrayList item type






      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        Solved. Thanks to kan's link below the code:



        public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

        List<T> lst = new ArrayList<T>();
        try {
        // Consuming remote method
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

        for(final JsonElement json: array){
        Gson g = new Gson();
        T entity = g.fromJson(json, clazz);
        lst.add(entity);
        }
        } catch (Exception e) {
        e.printStackTrace();
        } return lst;
        }


        check also this:
        Gson TypeToken with dynamic ArrayList item type






        share|improve this answer












        Solved. Thanks to kan's link below the code:



        public <T> List<T> listEntity(String jsonCommand, Class<T> clazz) {

        List<T> lst = new ArrayList<T>();
        try {
        // Consuming remote method
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonCommand).getAsJsonArray();

        for(final JsonElement json: array){
        Gson g = new Gson();
        T entity = g.fromJson(json, clazz);
        lst.add(entity);
        }
        } catch (Exception e) {
        e.printStackTrace();
        } return lst;
        }


        check also this:
        Gson TypeToken with dynamic ArrayList item type







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 20 at 13:53









        rugby82

        159213




        159213






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53376727%2flisttype-and-java-lang-classcastexception-com-google-gson-internal-stringmap%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Costa Masnaga

            Fotorealismo

            Sidney Franklin