首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用flexjson序列化对象

使用flexjson序列化对象
EN

Stack Overflow用户
提问于 2013-03-12 21:39:36
回答 1查看 1.4K关注 0票数 0

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

代码语言:javascript
复制
constructor = clazz.getDeclaredConstructor();
constructor.setAccessible(true);
return constructor.newInstance();

由于缺少空构造函数,正在clazz.getDeclaredConstructor()中引发异常。寻找构造函数的最好方法是什么,比如说那些签名:

DateTime(long timestamp)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-13 05:39:02

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

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

代码语言:javascript
复制
 new JSONDeserializer<SomeObject>()
     .use( DateTime.class, new DateTimeObjectFactory() )
     .deserialize(json);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15362826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档