GSON: How to move fields to parent object

前端 未结 4 910
暖寄归人
暖寄归人 2020-12-20 17:40

I\'m using Google GSON to transform my Java object to JSON.

Currently I\'m having the following structure:

\"Step\": {
  \"start_name\": \"Start\",
          


        
4条回答
  •  执笔经年
    2020-12-20 18:06

    You can probably do this by writing, and then registering a custom serializer for Step, and making sure inside it you work with Duration etc, instead of Data.

    // registering your custom serializer:
    GsonBuilder builder = new GsonBuilder ();
    builder.registerTypeAdapter (Step.class, new StepSerializer ());
    Gson gson = builder.create ();
    // now use 'gson' to do all the work
    

    The code for the custom serializer below, I'm writing off the top of my head. It misses exception handling, and might not compile, and does slow things like create instances of Gson repeatedly. But it represents the kind of thing you'll want to do:

    class StepSerializer implements JsonSerializer
    {
      public JsonElement serialize (Step src,
                                    Type typeOfSrc,
                                    JsonSerializationContext context)
        {
          Gson gson = new Gson ();
          /* Whenever Step is serialized,
          serialize the contained Data correctly.  */
          JsonObject step = new JsonObject ();
          step.add ("start_name", gson.toJsonTree (src.start_name);
          step.add ("end_name",   gson.toJsonTree (src.end_name);
    
          /* Notice how I'm digging 2 levels deep into 'data.' but adding
          JSON elements 1 level deep into 'step' itself.  */
          step.add ("duration",   gson.toJsonTree (src.data.duration);
          step.add ("distance",   gson.toJsonTree (src.data.distance);
          step.add ("location",   gson.toJsonTree (src.data.location);
    
          return step;
        }
    }
    

提交回复
热议问题