我想序列化一个属性,其名称与实体中的名称不同。
@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'}
您使用
json-typescript-mapper
而不是 class-transformer
(nest.js 本身支持)有什么具体原因吗?
使用
class-transformer
,您可以使用 @Expose
更改列的名称:
@Expose({ name: "name_column" })
name: string;
对于序列化,您只需使用
@UseInterceptors(ClassSerializerInterceptor)
注释控制器类或单个方法即可。使用注释,它将自动序列化您从控制器方法返回的所有实体。您可以在此线程中阅读更多相关信息。
之前的答案仅在您直接在模型实体上调用
classToPlain
时才有效。
如果您有一个单独的 DTO 类,您将先调用
plainToClass
,然后调用 classToPlain
,这将导致它为空或保留原始名称。
您可以采取的另一种更改名称的方法是公开 getter 函数:
@Expose({ toClassOnly: true })
name: string;
@Expose({ toPlainOnly: true })
get column_name(): string {
return this.name;
}