如何在客户端映射对象(DTO)?

时间:2018-02-15 08:33:34

标签: angular typescript automapper aspnetboilerplate dto-mapping

  • 打字稿
  • ABP + .NET Core

我正在使用网格来插入行(我正在使用的网格是DevExtreme框架的一个组件)。无论如何,与其他网格类似,它在插入记录时引发onRowInserting(e) { let mynewrow: ItemDto = e.data; // e.data contains the inserted row } 事件,将插入的行作为参数提供。在这种情况下,我需要将“匿名”对象(插入的数据)转换为我的客户端DTO。

ItemDto

为了更好地了解我需要达到的目标,请阅读以下文章:

Add rows to DevExtreme grid (angular) - model/schema

修改

export class ItemDto implements IItemDto { description: string; note: string; quantita: number; postId: number; id: number; constructor(data?: IItemDto) { if (data) { for (var property in data) { if (data.hasOwnProperty(property)) (<any>this)[property] = (<any>data)[property]; } } } init(data?: any) { if (data) { this.description = data["description"]; this.note = data["note"]; this.quantita = data["quantita"]; this.postId = data["postId"]; this.id = data["id"]; } } static fromJS(data: any): ItemDto { let result = new ItemDto(); result.init(data); return result; } toJSON(data?: any) { data = typeof data === 'object' ? data : {}; data["description"] = this.description; data["note"] = this.note; data["quantita"] = this.quantita; data["postId"] = this.postId; data["id"] = this.id; return data; } clone() { const json = this.toJSON(); let result = new ItemDto(); result.init(json); return result; } } export interface IItemDto { description: string; note: string; quantita: number; postId: number; id: number; }

e.data

以下是Object { __KEY__: "7c2ab8-1ff6-6b53-b9d7-ba25c27" description: "mydescription" id: 32 note: "mynote" postId: 4 quantita: 2 > __proto__: Object { constructor; , _defineG.... } 的内容(此时,我只在网格中添加了一些列,因此并非所有字段都存在)。

let mynewrow: ItemDto

此图片更好地代表了对象:https://imgur.com/ihVZrDh

我不确定我在generated行中做了什么。 我不知道它是否正确,或者是否足以在以后使用该变量,将其传递给保存新行的服务。

2 个答案:

答案 0 :(得分:1)

您可以使用装饰器和序列化器。请参阅lib for ts:https://www.npmjs.com/package/serialize-ts

答案 1 :(得分:0)

如何使用object.assign()将属性值从JSON响应对象推送到所需的类中?

class thingy {
  a = null;
  print = function() {
    console.log(this.a);
  };
}

const sourceJson = { 
  a: "hello world" 
};

const target = Object.assign(new thingy(), sourceJson);

target.print()