gpt4 book ai didi

java - 使用 flexjson 序列化对象

转载 作者:行者123 更新时间:2023-12-01 14:46:49 25 4
gpt4 key购买 nike

我正在尝试使用 flexjson 库。但在我的对象中我必须使用:com.google.api.client.util.DateTime 没有无参数构造函数。我总是收到 NoSuchMethodException 消息:Flexjson will instantiate any protected, private, or public no-arg constructor. 我有源代码并试图用它做一些事情,这里是代码:

constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
return constructor.newInstance();

由于缺少空构造函数,clazz.getDeclaredConstructor() 中抛出异常。查找带有这些签名的构造函数的最佳方法是什么:

日期时间(长时间戳)

有人在使用这个库时遇到过这种问题吗?也许您可以建议使用其他一种。我使用它来序列化 Google Cloud Endpoints 生成的对象。也许我可以用不同的方法做到这一点?

最佳答案

您不必更改 Flexjson 的源代码即可执行此操作。处理这个问题的方法是创建您自己的 ObjectFactory 实现并为您要绑定(bind)的类型注册它。从那里您可以根据需要实例化它。最简单的方法是继承 BeanObjectFactory 并重写方法 instantiate()。在那里你可以做任何你想做的事情来创建你想要的对象的实例。通过子类化 BeanObjectFactory,它将使用该对象的 setter/getter 将 JSON 中的各个属性绑定(bind)到对象中。如果您的对象不支持属性方法,您可能会发现实现 ObjectFactory 并从 JSON 手动设置该对象的值会更容易。 Flexjson 网站上有很多有关构建 ObjectFactories 的文档。

然后您可以使用以下方法将 ObjectFactory 注册到该数据类型:

 new JSONDeserializer<SomeObject>()
.use( DateTime.class, new DateTimeObjectFactory() )
.deserialize(json);

关于java - 使用 flexjson 序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362826/

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