2015-11-30 3 views
0

У меня есть интерфейс IPost и класс сообщение, я хочу, чтобы создать сообщение от данных JSON, в сообщении конструктору я получаю ответ JSON, где интерфейс IPost соответствует его.Машинописи создать класс из JSON

Я имею в виду интерфейс IPost генерируется этот замечательный инструмент json2ts

json2ts: генерировать машинопись интерфейсы из JSON

import { IPost, Title, Guid, Content, Excerpt, Embedded, Links } from './Ipost.ts'; 

export class Post implements IPost { 
    Id: number; 
    Date: string; 
    DateGmt: string; 
    Guid: Guid; 
    Modified: string; 
    ModifiedGmt: string; 
    Slug: string; 
    Type: string; 
    Link: string; 
    Title: Title; 
    Content: Content; 
    Excerpt: Excerpt; 
    Author: number; 
    FeaturedImage: number; 
    CommentStatus: string; 
    PingStatus: string; 
    Sticky: boolean; 
    Format: string; 
    Links: Links; 
    Embedded: Embedded; 

    constructor(json: any) { 
     var self = this; 
     json.subscribe(res => { 
      var jsonRes: any = res.json(); 
      self = jsonRes;  //something like this 
     }); 
    } 
} 

Могу ли я назначить класс Post непосредственно JSon поскольку JSON описывается то же самое как класс Post!

Есть ли какие-либо другие способы, кроме как назначить каждое свойство своему партнеру из json?

ответ

0

Как и в случае с JavaScript, вам придется перебирать каждое значение и присваивать это значение себе, используя стандартный цикл. Присвоение себя в вашем случае просто меняет значение self на значение json, оно не вносит никаких изменений this.

json.subscribe(res => { 
    let json = res.json(); 
    for (var prop in obj) { 
     if(obj.hasOwnProperty(prop)) { 
      this[prop] = obj[prop]; 
     } 
    } 
}); 

Примечание: => связывает this к наружному контексту (например, класс вы работаете с) в this, так что вам не нужно промежуточной self переменной.

+0

'let obj = res.json()' вместо let json –

+0

У меня есть вложенные свойства в моем интерфейсе, например 'post.embedded.title.rendered', это работает для всех или я должен создавать вложенные для циклов для что? –

+0

Если эти вложенные свойства являются экземплярами других классов, тогда вам придется делать это разными да. –

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