好的,我想出了我原来的问题,这是一个微不足道的命名问题,所以我会针对实际问题重新调整这个问题。
我在C#中有一个课程:
class Test
{
public string Foo { get; set; }
}
当我使用System.Web.Script.Serialization.JavaScriptSerializer序列化类时,我得到:
{"Foo":"Bar"}
在java中我有一个类:
class Test
{
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
我正在尝试使用GSON来解析JSON:
Gson gson = new Gson();
Test test = gson.fromJson(getJson(), Test.class);
但我得到空值。
如何将JSON值映射到略有不同的类,以便我仍然可以使用每种语言的最佳实践命名约定。
答案 0 :(得分:3)
我一直在使用@SerializedName注释,例如:
@SerializedName("Foo")
private String foo;
答案 1 :(得分:2)
默认情况下,Gson按原样使用字段名称,因此您的字段需要命名为UpTime
,ComputerName
等。但从Java命名角度来看,这将是亵渎神明的。
将您的字段以Java样式正确命名为较低的驼峰案例,并告诉Gson使用FieldNamingPolicy.UPPER_CAMEL_CASE
代替:
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
Statistics stats = gson.fromJson(response.getJson(), Statistics.class);
或者,您可以调整C#端以输出较低的驼峰案例{"upTime" : ... }
。