Java 在GSON中,是否有方法将内部类中的字段反序列化为父类?

Java 在GSON中,是否有方法将内部类中的字段反序列化为父类?,java,json,serialization,gson,Java,Json,Serialization,Gson,使用GSON,如果我有一些JSON看起来像这样: { "foo" : "asdf", "bar" : "jkl", "city": { "name": "Los Angeles", "country": "US" } } 是否有一种方法可以通过使用SerializedName注释将其反序列化为类似于此的类 public class SomeDto { String foo; String bar; String ci

使用GSON,如果我有一些JSON看起来像这样:

{
    "foo" : "asdf",
    "bar" : "jkl",
     "city": {
        "name": "Los Angeles",
        "country": "US"
    }
}
是否有一种方法可以通过使用SerializedName注释将其反序列化为类似于此的类

public class SomeDto {
  String foo;
  String bar;
  String city;
  String country;
}
不必创建内部类并编写特殊的反序列化程序

也许是这样的

@SerializedName("city.name")
private String city;

如果需要单个类,可以将“city”声明为Map-

Example.java

import java.util.Map;

public class Example {
    String foo;
    String bar;
    Map<String, String> city;
    public String getFoo() {
        return foo;
    }
    public void setFoo(String foo) {
        this.foo = foo;
    }
    public String getBar() {
        return bar;
    }
    public void setBar(String bar) {
        this.bar = bar;
    }
    public Map<String, String> getCity() {
        return city;
    }
    public void setCity(Map<String, String> city) {
        this.city = city;
    }
    @Override
    public String toString() {
        return "Example [foo=" + foo + ", bar=" + bar + ", city=" + city + "]";
    }
}
import com.example.Example;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class Main {
    private static Gson gson;

    static {
        gson = new GsonBuilder().create();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String s = "{\"foo\":\"asdf\",\"bar\":\"jkl\",\"city\":{\"name\":\"Los Angeles\",\"country\":\"US\"}}";
        Example info = gson.fromJson(s, Example.class);
        System.out.println(info);
   }
}
结果

Example [foo=asdf, bar=jkl, city={name=Los Angeles, country=US}]

据我所知-没有。但是,您可以将序列化细节隐藏在一个方便的接口后面

例如:

public class SomeDto {
  private String foo;
  private String bar;
  private City city;

  public String getFoo() {...};
  public String getBar() {...};
  public String getCity() {return city.getName();};
  public String getCountry() {return city.getCountry();};
}