实体类中含集合或者map的json转换

内容转自:http://biyutong.iteye.com/blog/1566708

转此内容仅为下次查找方便。

如果是一般实体:

public class Student implements java.io.Serializable{

    /**
    * @Fields serialVersionUID : TODO
    */
    private static final long serialVersionUID = -1943961352036134112L;
    private String sname;
    private Integer age;
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

由字符串转java bean时可以使用以下方法:

JSONObject jobj = JSONObject.fromObject(str);
Student s = (Student) JSONObject.tobean(jobj,Student.class);

是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……

在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();在classMap中put你要转换的类中的集合名,像:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);

比如我定义了如下类型:

import java.util.List;
/**
 *
* <P>Tiltle: AnalysisModel.java </P>
* <P>Description:模型类  </P>
* @author biyutong
* @date Jun 11, 2012 9:37:54 AM
* @version:V1.0
 */
public class AnalysisModel implements java.io.Serializable{

    /**
     * 固定条件
     */
    private List<Condition> regularCondtionList;//
    /**
     * 动态条件
     */
    private List<ConditionField> dynamicConFieldList;
    /**
     * 结果
     */
    private List<ResultField> resultField;
    /**
     * 获取前多少条数据
     */
    private Integer topnum;
    /**
     * 顺序还是随机
     */
    private String sortFlag;
    /**
     * 备注
     */
    private String remark;
    /**
     * 模型名称
     */
    private String modelName;
    /**
     * 对应的xml文件名称
     */
    private String fileName;
    public List<Condition> getRegularCondtionList() {
        return regularCondtionList;
    }
    public void setRegularCondtionList(List<Condition> regularCondtionList) {
        this.regularCondtionList = regularCondtionList;
    }
    public List<ConditionField> getDynamicConFieldList() {
        return dynamicConFieldList;
    }
    public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
        this.dynamicConFieldList = dynamicConFieldList;
    }
    public Integer getTopnum() {
        return topnum;
    }
    public void setTopnum(Integer topnum) {
        this.topnum = topnum;
    }
    public String getSortFlag() {
        return sortFlag;
    }
    public void setSortFlag(String sortFlag) {
        this.sortFlag = sortFlag;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getModelName() {
        return modelName;
    }
    public void setModelName(String modelName) {
        this.modelName = modelName;
    }
    public List<ResultField> getResultField() {
        return resultField;
    }
    public void setResultField(List<ResultField> resultField) {
        this.resultField = resultField;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

}

在转化的时候需要这样来写:

Map<String, Class> classMap = new HashMap<String, Class>();

classMap.put("regularCondtionList", Condition.class);

classMap.put("dynamicConFieldList", ConditionField.class);

classMap.put("resultField", ResultField.class);

AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
时间: 2024-08-03 02:13:16

实体类中含集合或者map的json转换的相关文章

JPA实体类中的注解

@Entity 标注于实体类上,通常和@Table是结合使用的,代表是该类是实体类@Table 标注于实体类上,表示该类映射到数据库中的表,没有指定名称的话就表示与数据库中表名为该类的简单类名的表名相对应,如果是逆向生成表的话就会以简单类名作为表名 如果指定名称,例如@Table(name="tb_user"),就表示映射到数据库中的tb_userz这个表:@Id 标注于属性上,通常是在get方法上,也可以在属性的声明上. 用于表示该属性作为ID主键@GeneratedValue 主键

利用反射将IDataReader读取到实体类中效率低下的解决办法

原文:利用反射将IDataReader读取到实体类中效率低下的解决办法 最开始使用反射一个类型的各个属性,对气进行赋值的代码如下: public static List<T> ToList<T>(IDataReader reader) { //实例化一个List<>泛型集合 List<T> DataList = new List<T>(); PropertyInfo[] properties = typeof(T).GetProperties()

数据库中信息存放到 实体类中

把数据库中信息存放到 实体类中,实体类设置值 Tb_pay tb_pay = payDAO.find(userid,Integer.parseInt(strno)); txtMoney.setText(String.valueOf(tb_pay.getMoney()));// 显示金额 txtTime.setText(tb_pay.getTime());// 显示时间 spType.setSelection(tb_pay.getType()-1);// 显示类别 txtHA.setText(tb

Hibernate在实体类中对于时间的注解

在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal(TemporalType.TIMESTAMP)(默认年月日时分秒)示例: @Temporal(TemporalType.DATE)private Date updateDate; 有了这个就不需要用java代码将时间戳,转换成需要的日期格式.直接在实体类中进行注解!

struct框架中实体类中属性的类型错误问题

在struct框架中,我们会写出实体类然后再sqlmap中进行映射,通常我们都知道 java中date类型有java.sql.date 和 java.util.date 经过细心发现,将对象生成为json对象时,json类会将date类型转换成java.util.date 如果在实体类中写成java.sql.date,就会抛出异常 下面我就来传个图 这里仅仅只需要把实体中date类型导入的包改成util的便不会出错 有人说util的包更常用,其实sql包中的直接输入就和我们平时写的时间的差不多,

MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  mapper根节点下配置ResultMap节点信息 <resultMap type="Student" id="studentMapper"> <result column="sname" property="stunam

使用sqlServer数据库,实体类中的配置问题

1.使用sqlServer数据库,实体类中的xml的配置问题(目前还没有去试试使用mysql的时候是否也是这样的写法) 1.1 在实体类的xml中调用自己在数据库中写的函数 对应的数据库中的函数,函数中的问好代表的是传入的参数

一个类在另一个类中以集合形式声明为属性时应该注意的问题

标题:一个类在另一个类中以集合形式声明为属性时应该注意的问题,先解释一下,看下面的代码吧 [Serializable] public class MO_T_sj_quest { public List<MO_T_sj_answer> AnswerList { get; set; } public List<MO_T_sj_answer> IDList { get; set; } public List<MO_T_sj_quest_bind> BindList { get

在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:

如果是String类型的字符串进行判空的时候: <if test="inspectOrg != null and inspectOrg != ''"> INSPECT_ORG = #{inspectOrg} </if> 但是如果是实体类中的Integer类型,就是去掉空字符串的判断: <if test="inspectTaio != null"> AND INSPECT_TAIO = #{inspectTaio} </if&