Gson toJson(),奇怪的行为(产生空json)

时间:2016-06-16 14:09:49

标签: java android gson to-json

我在使用Gson序列化/反序列化此类时遇到问题:

public class Test {

    @SerializedName("id")
    private String mId;

    public String getId() { return mId; }

    public static Test fromJson(String json) { return new Gson().fromJson(json, Test.class); }
    public String toJson() { return new Gson().toJson(this, Test.class); }
}

如果我这样做:

Test test = Test.fromJson("{\"id\":\"1465988493\"}");
Log.i(TAG, "Test: " + test.toJson());
//Log.i(TAG, "Test id: " + test.getId());

打印:

  

测试:{}

但如果我这样做:

Test test = Test.fromJson("{\"id\":\"1465988493\"}");
Log.i(TAG, "Test: " + test.toJson());
Log.i(TAG, "Test id: " + test.getId());

按预期工作并打印:

  

测试:{" id":" 1465988493"}

     

测试ID:1465988493

所以在调用toJson之后调用getter使得json()工作。 WTF ???

最后,如果我将id初始化为null:

public class Test {

    @SerializedName("id")
    private String mId = null; // <- Init to null

    public String getId() { return mId; }

    public static Test fromJson(String json) { return new Gson().fromJson(json, Test.class); }
    public String toJson() { return new Gson().toJson(this, Test.class); }
}

然后一切都按预期工作,这段代码:

String testJson = "{\"id\":\"1465988493\"}";
Test test = Test.fromJson(testJson);
Log.i(TAG, "Test: " + test.toJson());
//Log.i(TAG, "Test id: " + test.getId());

打印:

  

测试:{&#34; id&#34;:&#34; 1465988493&#34;}

所以,我有解决方案(将我的所有字段初始化为null),但我想了解错误是什么?

1 个答案:

答案 0 :(得分:0)

这只是proguard问题。如果您使用proguard,请记住,如果您不使用proguard,则可以从类中删除某些字段。例如,您的应用程序不使用类的获取器。如此简单的方法就是添加注释以使其像这样:

@SerializedName("id")
@Keep
private String mId;

或在您的proguard文件中添加保留规则。

相关问题