2016-07-15 6 views
0

Ich habe folgendes Typoskript Modellobjekt userTyposkript: Wie JSON-Objekt mit privaten Variablen deserialisieren?

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; 
} 

} 

Ich speichere das Objekt über diesen Code:

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

Wenn ich in den lokalen Speicher sehen gibt es die folgende Zeichenfolge:

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

Wie bekomme ich das Benutzerobjekt wieder?

Ich denke, das hat etwas mit den Unterstrichen zu tun, mit denen das Objekt gespeichert wird. Wie kann ich das Objekt korrekt empfangen?

+0

'JSON.parse' gibt ein js-Objekt zurück (nicht vom Typ' User'). Sie sollten die 'Benutzer'-Instanz manuell erstellen und initialisieren. [This] (http://stackoverflow.com/questions/38100853/typescript-deserializing-json-into-collection-with-multiple-types/38104840#38104840) könnte hilfreich sein. –

Antwort

0

Sie müssen einige Serialisierungs- und Deserialisierungsmethoden in Ihrem Modell implementieren.

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')); 
Verwandte Themen