如何重命名 nest.js 中的 JSON 字段
How to rename JSON fields in nest.js
我想知道在 nest.js
中重命名反序列化器字段的正确方法是什么。对于下面给定的对象:
export class User {
contact_email?: string;
}
contact_email
是我们数据库中的一个字段,但它与正在发送 contactEmail
.
的当前应用冲突
我尝试了以下给定的解决方案:
import { Expose } from 'class-transformer';
export class User {
@Expose({ name: "contactEmail" })
contact_email?: string;
}
上面的这个完全重命名了字段,并且在使用对象时,它根本被转换为 contactEmail
,而不仅仅是从 JSON(字符串)转换为 Class。然后我尝试了以下解决方案:
import { Transform } from 'class-transformer';
export class User {
@Transform(key => "contactEmail", { toClassOnly: true })
contact_email?: string;
}
这个案例好像也不行。
来自应用程序的信息:
{
"contactEmail": "email@gmail.com"
}
我想做一些类似于 rust 的 serde #rename。我可以在其中重命名 serialization/deserialization 的字段,但保留应用程序的原始名称。
我们正在使用 nest.js + fastify.js + sequelize.js.
谢谢。
好的,经过一些挖掘,我有一个解决方法,但正如您将看到的那样,它是一个丑小鸭/黑客:
@Expose()
@Transform(
({value, obj, type}) => {
console.log(value, obj, type);
if (obj['contact_email']) {
return obj['contact_email'];
} else {
return value;
}
}
)
contactEmail?: string;
这对你有用吗?
使用三元语句 trim 向下一点:
@Expose()
@Transform(
({value, obj}) =>
typeof value === 'undefined' ? obj['contact_email'] : value
)
contactEmail?: string;
我可能应该就 class-transform
项目寻求澄清,因为我怀疑这不是故意的。
我在将日志放入 @Transform
装饰器后注意到,在第一次通过 value
时是 undefined
,但在第二次通过时它有一个值。
我知道它被调用了两次,我想一次是在调用 plainToClass
,然后是在序列化期间。
希望此变通办法对您有所帮助或为您解决问题。
我想知道在 nest.js
中重命名反序列化器字段的正确方法是什么。对于下面给定的对象:
export class User {
contact_email?: string;
}
contact_email
是我们数据库中的一个字段,但它与正在发送 contactEmail
.
我尝试了以下给定的解决方案:
import { Expose } from 'class-transformer';
export class User {
@Expose({ name: "contactEmail" })
contact_email?: string;
}
上面的这个完全重命名了字段,并且在使用对象时,它根本被转换为 contactEmail
,而不仅仅是从 JSON(字符串)转换为 Class。然后我尝试了以下解决方案:
import { Transform } from 'class-transformer';
export class User {
@Transform(key => "contactEmail", { toClassOnly: true })
contact_email?: string;
}
这个案例好像也不行。
来自应用程序的信息:
{
"contactEmail": "email@gmail.com"
}
我想做一些类似于 rust 的 serde #rename。我可以在其中重命名 serialization/deserialization 的字段,但保留应用程序的原始名称。
我们正在使用 nest.js + fastify.js + sequelize.js.
谢谢。
好的,经过一些挖掘,我有一个解决方法,但正如您将看到的那样,它是一个丑小鸭/黑客:
@Expose()
@Transform(
({value, obj, type}) => {
console.log(value, obj, type);
if (obj['contact_email']) {
return obj['contact_email'];
} else {
return value;
}
}
)
contactEmail?: string;
这对你有用吗?
使用三元语句 trim 向下一点:
@Expose()
@Transform(
({value, obj}) =>
typeof value === 'undefined' ? obj['contact_email'] : value
)
contactEmail?: string;
我可能应该就 class-transform
项目寻求澄清,因为我怀疑这不是故意的。
我在将日志放入 @Transform
装饰器后注意到,在第一次通过 value
时是 undefined
,但在第二次通过时它有一个值。
我知道它被调用了两次,我想一次是在调用 plainToClass
,然后是在序列化期间。
希望此变通办法对您有所帮助或为您解决问题。