用flexjson序列化对象



我正在尝试使用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()中抛出

异常。找到构造函数的最佳方法是什么呢?比如说那些签名:

DateTime(long timestamp) ?

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

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

然后您可以使用以下命令将ObjectFactory注册为该数据类型:

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

相关内容

  • 没有找到相关文章

最新更新