gpt4 book ai didi

java - GSON 将瞬变反序列化为 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:58:42 24 4
gpt4 key购买 nike

我有一个 POJO,其中一个字段标记为 transient 。 GSON 不序列化它。伟大的。但是当它被反序列化时,它会清除该字段的初始设置。

例如,如果我有这个对象:

public class ObjWithTransient {
public String name;
public transient List<String> listOStrings = new ArrayList();
}

然后我运行这个测试:

@Test
public void testSerializeWithTransient() throws Exception {
ObjWithTransient obj = new ObjWithTransient();
obj.name = "Foobar";
String json = gson().toJson(obj);

// Deserialize
ObjWithTransient obj2 = GsonUtil.gson().fromJson(json, ObjWithTransient.class);
Assert.assertEquals(obj2.name, "Foobar");
Assert.assertNotNull(obj2.listOStrings); // <--- Fails here
Assert.assertEquals(obj2.listOStrings.size(), 0);
}

通过将其标记为 transient ,我假设我是在告诉 GSON 忽略它,但事实并非如此。在此处保留初始设置的最佳方法是什么?

编辑:我认为问题是因为没有声明的构造函数。这不适用于内部类,但对于普通类或静态内部类似乎有效。阅读 GSON 代码,它尝试了多种方法来创建对象,但如果没有其他方法,最终使用 UnsafeConstructor 来创建它。这将创建一个全面包含空条目的对象。我还可以添加一个 InstanceCreator 来告诉 Gson 如何创建对象。

最佳答案

我认为问题是因为没有声明的构造函数。这不适用于内部类,但对于普通类或静态内部类似乎有效。阅读 GSON 代码,它尝试了多种方法来创建对象,但如果没有其他方法,最终使用 UnsafeConstructor 来创建它。这将创建一个全面包含空条目的对象。我还可以添加一个 InstanceCreator 来告诉 Gson 如何创建对象。

关于java - GSON 将瞬变反序列化为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31187416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com