使用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;
答案 0 :(得分:1)
如果您需要一个班级,您可以申报" city"作为地图 -
<强> 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 + "]";
}
}
<强> Main.java 强>
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}]
答案 1 :(得分:1)
据我所知 - 没有。但是,您可以在方便的界面后隐藏序列化详细信息。
例如:
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();};
}