如何使用GSON将JSON值映射到不同的类

时间:2012-11-12 22:34:45

标签: c# java json gson

好的,我想出了我原来的问题,这是一个微不足道的命名问题,所以我会针对实际问题重新调整这个问题。

我在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值映射到略有不同的类,以便我仍然可以使用每种语言的最佳实践命名约定。

2 个答案:

答案 0 :(得分:3)

我一直在使用@SerializedName注释,例如:

@SerializedName("Foo")
private String foo;

答案 1 :(得分:2)

默认情况下,Gson按原样使用字段名称,因此您的字段需要命名为UpTimeComputerName等。但从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" : ... }