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

问题描述 投票:0回答:2

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

@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'}
node.js typescript serialization nestjs class-transformer
2个回答
11
投票

您使用

json-typescript-mapper
而不是
class-transformer
(nest.js 本身支持)有什么具体原因吗?


使用

class-transformer
,您可以使用
@Expose
更改列的名称:

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

对于序列化,您只需使用

@UseInterceptors(ClassSerializerInterceptor)
注释控制器类或单个方法即可。使用注释,它将自动序列化您从控制器方法返回的所有实体。您可以在此线程中阅读更多相关信息。


0
投票

之前的答案仅在您直接在模型实体上调用

classToPlain
时才有效。


如果您有一个单独的 DTO 类,您将先调用

plainToClass
,然后调用
classToPlain
,这将导致它为空或保留原始名称。

您可以采取的另一种更改名称的方法是公开 getter 函数:

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

@Expose({ toPlainOnly: true })
get column_name(): string {
   return this.name;
}
© www.soinside.com 2019 - 2024. All rights reserved.