2017-06-19 82 views
0

有许多方法可以用json响应来创建typescrpt类。为什么要对Json对象进行爆炸序列化?

在很多项目我做了这样的:

export class Group 
{ 
    constructor(
    public Id?: number, 
    public Name?: string, 
    public Users?: User[], 
    public Role?: Role, 
    public Customers: Customer[] = new Array()) 
    { 
    } 
} 

主要好处是,它是简单干净,但没有软件,它可以一个C#类自动转换到这一点。

然后我挖掘并找到https://github.com/NSwag/NSwag/wiki/NSwagStudio 这可以将c#models类转换为typescript。

问:我为什么要序列化每个JSON像这样Language.fromJS(requestJson)

在未来,我看不出有任何风险与我的旧方法。

export class Language { 
    id: number; 
    flag?: string | null; 

    init(data?: any) { 
     if (data) { 
      this.id = data["Id"] !== undefined ? data["Id"] : <any>null; 
      this.flag = data["Flag"] !== undefined ? data["Flag"] : <any>null; 
     } 
    } 

    static fromJS(data: any): Language { 
     let result = new Language(); 
     result.init(data); 
     return result; 
    } 

    toJSON(data?: any) { 
     data = typeof data === 'object' ? data : {}; 
     data["Id"] = this.id !== undefined ? this.id : <any>null; 
     data["Flag"] = this.flag !== undefined ? this.flag : <any>null; 
     return data; 
    } 
} 

回答

1

你的第一个选项的主要问题是,你必须要从一个JSON响应的情况下,每次提供的属性:

new Group(json.id, json.name, ...) 

而与你的第二个选项,你可以抽象的JSON在一个地方执行实例转换 - fromJS方法。通过明确的toJSON方法,您可以在对象序列化时控制对象的结构 - 当您需要在TypeScript中命名相同的属性以及服务器端的其他属性时,这可能会有所帮助。

+0

不正确,我不必提供自动发生的属性 – user3387996

+0

这是如何自动发生的?你如何用你的第一个选项创建一个实例? – Saravana

+0

哦,等待你是对的即时通讯没有创建一个实例即时通讯假铸造它 response.json(),ty – user3387996