2017-02-02 1 views
0

Я посылаю JSon réponse с сервера в следующем формате:Угловое 2: Синтаксический JSON в конструкторе

{id: Int, name: String, childJSON: String} 

и готовы сопоставить его

export class Student{ 
    constructor(public id: string, 
       public name: string, 
       public childJSON: ChildObject) { 

    } 

export class ChildObject { 
     constructor(public class: number, 
        public age: number){} 

делать response.json() as Student; я получаю {id:1, name: "sumit", childJSON: "{class: 5, age: 10}" ie childJSON имеет строковый тип вместо типа ChildObject. В принципе, строка не привязана к моему дочернему объекту. Правильно ли это для этого или мне нужно отправить дочерний объект с сервера, а не просто JSON String

+0

должен быть '{ID: Int, имя: String, childJSON: ChildObject}' –

+2

@AmitKumarGhosh. Noooooooo. Похоже, вы путаете TypeScript с другим языком. – AngularChef

ответ

0

Вам нужно «повторно увлажнить» объекты вручную в конструкторе, и вы не можете использовать параметр « свойство ", чтобы сделать это (метод, в котором вы использовали public в конструкторе для автоматического преобразования параметров конструктора в свойства класса).

Вот как я бы это сделать:

export class Student{ 
    constructor(options: { 
       id: string; 
       name: string; 
       childJSON: any; 
       }) { 
    // Now you have to instantiate the class properties one by one. 
    this.id = options.id; 
    this.name = options.name; 
    this.childJSON = new ChildObject(options.childJSON); 
    } 
} 

А потом инстанцирует:

const student = new Student(studentJson); 

Или, если вы используете наблюдаемом для извлечения данных:

this.http.get(...).map(...).subscribe(studentJson => 
    this.student = new Student(studentJson) 
} 

Это решение более гибкое, так как вы можете передать оригинальный объект JSON непосредственно для instanciation. В вашем примере, вы должны были написать что-то вроде:

// NOT GOOD: You must pass each property individually, in the right order... 
const student = new Student(studentJson.id, studentJson.name,...); 
+0

const student = new Student (studentJson) ;, я не могу этого сделать, поскольку получаю и отправляю данные с помощью наблюдаемых; –

+0

Спасибо, надеюсь, это сработает. Но мой фактический сценарий гораздо более утомительный, чем упоминалось в вопросе. Хотя это был проницательный способ узнать :) –

Смежные вопросы