NodeJS 如何使用toJSON更改序列化实体的属性名?

ss2ws0br  于 2024-01-07  发布在  Node.js
关注(0)|答案(2)|浏览(192)

我想序列化一个属性,它的名称与实体中的名称不同。

@Entity()
export class MyEntity {
  // This should be serialized with name_column in JSON
  @Column()
  name: string
}

字符串
当我调用classToPlain时,我希望属性name被序列化为name_column

classToPlain(myEntity)
// returns: {name: 'my name'}
// should be: {name_column: 'my name'}

zbdgwd5y

zbdgwd5y1#

你使用json-typescript-mapper而不是nest.js原生支持的class-transformer有什么特殊原因吗?
使用class-transformer,您可以使用@Expose更改列的名称:

@Expose({ name: "name_column" })
name: string;

字符串
对于序列化,您可以使用@UseInterceptors(ClassSerializerInterceptor)注解您的控制器类或单个方法。使用注解,它将自动序列化所有实体,您从控制器方法返回。您可以在this thread中阅读有关此的更多信息。

46qrfjad

46qrfjad2#

只有在模型实体上直接调用classToPlain时,前面的答案才有效。
如果你有一个单独的DTO类,你将调用plainToClass,然后调用classToPlain,这将导致它要么是空的,要么保持原来的名称。
另一种可以用来更改名称的方法是公开一个getter函数:

@Expose({ toClassOnly: true })
name: string;

@Expose({ toPlainOnly: true })
get column_name(): string {
   return this.name;
}

字符串

相关问题