我正在尝试使用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生成的对象。也许我可以用不同的方法做到这一点?
发布于 2013-03-13 05:39:02
你不需要修改Flexjson的源代码就可以做到这一点。处理这个问题的方法是创建您自己的ObjectFactory实现,并为您要绑定到的类型注册该实现。从那里你可以实例化它,你想要的。最简单的方法是继承BeanObjectFactory的子类并覆盖instantiate()方法。在这里,你可以做任何你想要创建对象实例的事情。通过将BeanObjectFactory子类化,它将负责使用对象的setter/getter将各个属性从JSON绑定到您的对象。如果您的对象不支持属性方法,您可能会发现更容易实现ObjectFactory并从JSON手动设置该对象的值。Flexjson网站上有很多关于构建ObjectFactories的文档。
然后,您可以使用以下命令将ObjectFactory注册为该数据类型:
new JSONDeserializer<SomeObject>()
.use( DateTime.class, new DateTimeObjectFactory() )
.deserialize(json);https://stackoverflow.com/questions/15362826
复制相似问题