怎么序列化继承自HashMap的bean为Json?
User实体
public class User extends HashMap<String, Object>
{
private String name;
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
user对象
{
User user = new User();
user.setName("123");
user.put("address", "北京");
user.put("phone", "110");
}
使用jackson或gson序列化后name的值没有了
{"address":"北京","phone":"110"}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
jackson解析的时,会获取父类的Class类型来执行不同解析实现类,而User继承了HashMap,他的解析实现类是MapSerializer!而MapSerializer解析时,不会序列自身的属性!只会序列自身存储的Entry[](HashMap内的一个存储数据的数组)数组!自然就没有序列到User类的name!
想要序列name,可以将User类改成以下
很尴尬,既然继承了hashmap,把name put进去不就可以了。
还有一个问题 ,为啥要继承hashmap?
如果你仅仅是想把user实体转化成名值队的形式的话,不用继承hashmap也是可以的。
看到了楼主的回复,楼主的需求感觉类似扩展字段的意思。
我们一般就用字符类型进行存储,在bean里面定义为String类型,然后将JSON对象转换成JSON字符串存储在里面,需要使用的时候,取出JSON字符串,然后在前端或者后台代码里将JSON字符串反序列化为JSON对象。
==============================华丽的分割线==============================
昨天也看到了楼主的帖子,想问一下楼主需要定义这样的数据结构的目的是啥?这样的话看看能不能给出更合适的答案。
楼主也可以使用这种方法
1.定义一个接口,如下
public interface IJsonObject {
}
2.User类实现该接口并实现方法
public class User implements IJsonObject {
}
3.这样就可以选择性的序列化了,把需要序列化的属性定义在该方法中即可.