首页 > 解决方案 > 使用 json2typescript 进行 Angular 2+ 反序列化

问题描述

我正在使用 Json2Typescript 序列化和序列化 typescript 对象。问题是我无法反序列化从后端收到的 JSON 数据。

这是我的打字稿课:

@JsonObject('Respondent')
export class Respondent {
    @JsonProperty('id',Number)
    Id:number;

    video:string;

    @JsonProperty('synchro_id',Number)
    SynchroId:string;

    @JsonProperty('language',String)
    Language:string;

    @JsonProperty('project_id',Number)
    ProjectId:number;

    @JsonProperty('terminal_id',Number)
    TerminalId:number;

    @JsonProperty('questionnaire_id',Number)
    QuestionnaireId: number;

    @JsonProperty('device_type_id',Number)
    DeviceTypeId:string;
    // TODO: This is to be removed
    medias: Media[] = null;
  // TODO: This is to be removed
    clicks: Click[] = null;

    @JsonProperty('email_status',String)
    emailStatus:string;

    @JsonProperty('inserted_local_time',String)
    insertedTime:string;

    @JsonProperty('responses',[Answer])
    Answers:Answer[];// TSMap<number,Answer>;  // {[key: number]: Answer[]} = {};

    @JsonProperty('size_on_disk',Number)
    sizeOnDisk:number;

    @JsonProperty('email_opened',Boolean)
    emailOpened:boolean;

    @JsonProperty('token',String)
    token:string;

    constructor() {

    }
...
}

这就是我反序列化 JSON 的方式。

private getRespondents(start:number,end:number) {

        this._projectService.getRespondentsByRange(start,end,-1,-1,-1,this.questionnaire.id,-1,false).subscribe((respondents) => {
                this.respondents = new Array<Respondent>();

                this.respondents = new JsonConvert().deserializeArray(respondents,Respondent);  // doe s not work

                if(this.respondents!=null && this.respondents.length>0) {
                  this._sizeOnDisk = this.respondents[0].sizeOnDisk * this._nbOfRespondents;
                }
            },
            error => this._errorMessage = <any>error);
    }

标签: jsonangulartypescript

解决方案


好的,我找到了答案。

官方文档中没有明确规定。

您必须初始化类属性。

@JsonProperty("email", String)
public email: String = "";

检查此链接以获取答案


推荐阅读