2

好的,我发现我原来的问题是一个微不足道的命名问题,所以我将把这个问题重新用于实际问题。

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

4

2 回答 2

3

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

@SerializedName("Foo")
private String foo;
于 2012-11-12T23:38:40.983 回答
2

Gson 默认使用字段名称,因此您的字段需要命名为UpTime,ComputerName等。不过,从 Java 命名的角度来看,这将是亵渎神明的。

保持你的字段以 Java 风格正确命名为小写驼峰式,并告诉 GsonFieldNamingPolicy.UPPER_CAMEL_CASE改用:

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
    .create();
Statistics stats = gson.fromJson(response.getJson(), Statistics.class);

或者,您当然可以调整 C# 端以输出小驼峰大小写{"upTime" : ... }

于 2012-11-12T22:51:34.480 回答