fastjson反序列化不成功的一个问题

hzwei206 发布于 2016/05/20 15:27
阅读 2K+
收藏 0

解读下一代网络:算力网络正从理想照进现实!>>>

@wenshao 你好,想跟你请教个问题:

fastjson反序列化不成功的一个问题:

父类属性的set方法有返回值(返回父类本身,为了写代码时方便链式编程),反序列化到子类对象时,父类中的属性反序列化失败。案例如下:

(同事写的)类定义如下:

public class BaseResponse {
    private String cmd;
    private int result = -1;
    private String note;
    public String getCmd() {
        return cmd;
    }

    public BaseResponse setCmd(String cmd) {
        this.cmd = cmd;
        return this;
    }

    public int getResult() {
        return result;
    }

    public BaseResponse setResult(int result) {
        this.result = result;
        return this;
    }

    public String getNote() {
        return note;
    }

    public BaseResponse setNote(String note) {
        this.note = note;
        return this;
    }

    @Override
    public String toString(){
        return "BaseResponse [cmd=" + cmd + ", result=" + result + ", note=" + note + "]";
    } 
}
public class PushMessageResp extends BaseResponse {
}
String str = "{\"cmd\":\"PushRescueCases\",\"result\":0,\"note\":\"Success\"}";
System.out.println(JSON.parseObject(str, PushMessageResp.class));

得到的结果是BaseResponse [cmd=null, result=-1, note=null]  明显反序列化失败。如果父类中的set方法没有返回值,则反序列化正确。如果直接反序列化到父类对象:

String str = "{\"cmd\":\"PushRescueCases\",\"result\":0,\"note\":\"Success\"}";
System.out.println(JSON.parseObject(str, BaseResponse.class));

这时候能正确反序列化BaseResponse [cmd=PushRescueCases, result=0, note=Success]。

改用gson试了下,new Gson().fromJson(str, PushRescueCasesResp.class) 可以正确反序列化到子类。

加载中
返回顶部
顶部