Gson - 将嵌套对象序列化为属性

Adv*_*Dog 8 json gson android-json

有没有一种简单的方法来转换嵌套对象如何转换为JSON?我正在尝试创建一个JSON对象来匹配后端.我正在为我的网络使用Retrofit,它使用Gson将Object转换为JSON.

我无法访问网络调用和转换之间的任何代码,所以我试图通过GsonBuilder或Annotations找到一种简洁的方法来修改Object的转换方式.

// Automatically converted to JSON with passed in Gson.
Call<myObject> search( @Body foo myFoo ); 
Run Code Online (Sandbox Code Playgroud)
public class foo {
    String text = "boo";
    bar b = new bar();
}

public class bar {
    String other = "moo";
}
Run Code Online (Sandbox Code Playgroud)

结果:

{ "text": "boo", "b" { "other": "moo" } }
Run Code Online (Sandbox Code Playgroud)

期望的结果:

{ "text": "boo", "other": "moo" }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.:)

pra*_*war 5

更新我查看了GsonBuilder,是的,您可以使用自定义序列化.你需要覆盖serialize方法JsonSerializer<type>

只需定义一个类如下.这里只添加了2个属性.

public class FooSerialize implements JsonSerializer<foo> {

@Override
    public JsonElement serialize(foo obj, Type foo, JsonSerializationContext context) {

         JsonObject object = new JsonObject();
         String otherValue = obj.b.other;
         object.addProperty("other", otherValue );
         object.addProperty("text", obj.text);
         return object;
    }
  }
Run Code Online (Sandbox Code Playgroud)

创建gson对象如下.

Gson gson = new GsonBuilder().registerTypeAdapter(foo.class, new FooSerialize()).setPrettyPrinting().create();
Run Code Online (Sandbox Code Playgroud)

只需转换为Json

 gson.toJson(fooObject);
Run Code Online (Sandbox Code Playgroud)

瞧!lmk如果适合你.我在我的系统上进行了测试.忘记字符串覆盖它被调用Json到Obj转换.这只是您需要处理反序列化到对象的序列化.寻找在线资源以获得类似线路的想法.

替代解决方案将仅为JSON转换目的定义虚拟pojos.在发送使用setter为pojo对象赋值并在pojo上使用gson时,反之亦然或在上面的解决方案中使用自定义序列化和反序列化所需的类.