javascript - Typescript:如何使用私有(private)变量反序列化 JSON 对象?

标签 javascript json typescript local-storage

我有以下 typescript 模型对象user

export class User {

constructor(
    private _name: string,
    private _email: string
)  {}


public get name():string {
    return this._name;
}

public set name(value:string) {
    this._name = value;
}

get email():string {
    return this._email;
}

set email(value:string) {
    this._email = value;
}

}

我通过以下代码存储对象:

let user = new User('myName', 'myEmail');
localStorage.setItem('user', JSON.stringify(user));

如果我查看本地存储,则会出现以下字符串:

{"_name":"myName","_email":"myEmail"}

如何再次获取用户对象?

let user: User = JSON.parse(localStorage.getItem('user'));
console.log(user.name); // logs undefined. Should log 'myName'
console.log(user._name); // this logs 'myName'. But according to the typescript documentation this should NOT work!

我猜这与存储对象的下划线有关。 如何正确接收对象?

最佳答案

您需要在模型中实现一些序列化和反序列化方法。

class User {
    static public deserialize(serialized) {
        const {name, email} = JSON.parse(serialized);
        return new User(name, email);
    }    

    constructor(
        private _name: string,
        private _email: string
    )  {}


    public get name():string {
        return this._name;
    }

    public set name(value:string) {
        this._name = value;
    }

    get email():string {
        return this._email;
    }

    set email(value:string) {
        this._email = value;
    }

    public serialize() {
        return JSON.stringify({name: this.name, email: this.email});
    }

}

let user = new User('myName', 'myEmail');
localStorage.setItem('user', user.serialize());

let user1: User = User.deserialize(localStorage.getItem('user'));

关于javascript - Typescript:如何使用私有(private)变量反序列化 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38397898/

相关文章:

javascript - Backbone - 防止在删除 View 后延迟执行

javascript - 从 JavaScript 数组中删除逗号

javascript - 递归javascript算法中的return语句,如何一直返回堆栈?

javascript - 有没有办法使用浏览器的控制台从用户那里获取数据

node.js - 非 Promise 值的无效 'await'(Bluebird promise)

javascript - 限制符号、字符和数字的文本框

javascript - 删除字符串开头和结尾的单引号

android - 将 XML/JSON 响应缓存到我的应用程序中的最佳方式。全文文件?

javascript - AJAX - JSON 未定义(jQuery、NodeJS)

typescript - 如何默认具有交集类型的泛型函数参数