如何通过 class-transformer 识别子对象? | Nest.js
how to identify a child object by class-transformer ? | Nest.js
我正在尝试使用库“class-transformer”将 json 主体解析为 JavaScript 对象,但他无法识别我的子对象。
这是 json 文件:
{
"shops": [{
"shopId": 1,
"name": "La piscine Marius-Leclercq",
"address": "99 Avenue Barbusse, 62440 Harnes",
"description": "La piscine Marius-Leclercq est située en plein centre de la ville dans la rue Barbusse. Différentes spécialités sportives y sont proposées. Un bassin de 25 mètres de long vous accueille du lundi au dimanche ainsi qu’un petit bain pour les activités comme l’aquagym, l’aquadouce ou le jardin aquatique.",
"email": "piscinemariusleclercq@contact.fr",
"phone": "03 21 13 96 00",
"localisation": {
"lat": 50.450157165527344,
"long": 2.898190498352051
},
"vidoLink": "https://www.youtube.com/watch?v=rqDEgCBYMxA&ab_channel=AvallonVision",
"pictures": [{
"idPicture": 1,
"link": "https://zupimages.net/up/21/02/cpri.jpg"
},
{
"idPicture": 2,
"link": "https://zupimages.net/up/21/02/3mkk.jpg"
}
],
"openShop": [{
"dayWeek": "Monday",
"hourStart": "12:00:00",
"endHour": "13:00:00"
},
{
"dayWeek": "Monday",
"hourStart": "16:15:00",
"endHour": "19:00:00"
},
{
"dayWeek": "Tuesday",
"hourStart": "16:15:00",
"endHour": "19:00:00"
},
{
"dayWeek": "Thursday",
"hourStart": "10:00:00",
"endHour": "13:30:00"
},
{
"dayWeek": "Thursday",
"hourStart": "14:00:00",
"endHour": "19:15:00"
},
{
"dayWeek": "Saturday",
"hourStart": "10:00:00",
"endHour": "12:00:00"
},
{
"dayWeek": "Saturday",
"hourStart": "14:00:00",
"endHour": "17:00:00"
},
{
"dayWeek": "Sunday",
"hourStart": "8:00:00",
"endHour": "12:00:00"
}
]
},
{
"shopId": 2,
"name": "Climb up",
"address": "Plaine sportive, 110 Rue Jean Jaurès, 59810 Lesquin",
"description": "Depuis plus de 15 ans nous cultivons la diversité au sein de nos structures. Diversité de profils, de visions et de sensibilités. Nos nombreux échanges ont ainsi donné jour à un concept de salles d’escalade pensées comme des lieux de vie ouverts à tous.",
"email": "climbup@contact.fr",
"phone": "03 20 07 57 42",
"localisation": {
"lat": 50.5865602,
"long": 3.1071495
},
"vidoLink": "https://www.youtube.com/watch?v=3-3a9GghAR0&ab_channel=ClimbUp",
"pictures": [{
"idPicture": 3,
"link": "https://zupimages.net/up/21/02/z8st.jpg"
},
{
"idPicture": 4,
"link": "https://zupimages.net/up/21/02/6yh3.jpg"
}
],
"openShop": [{
"dayWeek": "Monday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Tuesday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Wednesday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Thursday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Friday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Saturday",
"hourStart": "10:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Sunday",
"hourStart": "8:00:00",
"endHour": "12:00:00"
}
]
}
]
}
有我的DTO:
export class ShopEntity {
shops : ShopDto[];
}
export class ShopDto {
@Expose({
name: 'shopId'
})
id: number;
name: string;
address: string;
description: string;
email: string;
phone: string;
localisation: {
lat: number;
long: number;
}
videoLink: string;
offers: OfferDto[];
pictures: PictureDto[];
openShop: OpenShopDto[];
}
这是我的代码行:
let shopsTab = plainToClass(ShopEntity, body);
我成功地从 ShopEntity 获取了我的第一个对象,但标签商店未定义。
对于所有子对象,您应该添加 @Type(() => ChildObjectType)
。由于泛型如何反映在打字稿中,数组不会以其他方式序列化。作为一般规则,当我在 class-transformer
中处理子对象时,我确保添加 @Type()
装饰器。
我正在尝试使用库“class-transformer”将 json 主体解析为 JavaScript 对象,但他无法识别我的子对象。
这是 json 文件:
{
"shops": [{
"shopId": 1,
"name": "La piscine Marius-Leclercq",
"address": "99 Avenue Barbusse, 62440 Harnes",
"description": "La piscine Marius-Leclercq est située en plein centre de la ville dans la rue Barbusse. Différentes spécialités sportives y sont proposées. Un bassin de 25 mètres de long vous accueille du lundi au dimanche ainsi qu’un petit bain pour les activités comme l’aquagym, l’aquadouce ou le jardin aquatique.",
"email": "piscinemariusleclercq@contact.fr",
"phone": "03 21 13 96 00",
"localisation": {
"lat": 50.450157165527344,
"long": 2.898190498352051
},
"vidoLink": "https://www.youtube.com/watch?v=rqDEgCBYMxA&ab_channel=AvallonVision",
"pictures": [{
"idPicture": 1,
"link": "https://zupimages.net/up/21/02/cpri.jpg"
},
{
"idPicture": 2,
"link": "https://zupimages.net/up/21/02/3mkk.jpg"
}
],
"openShop": [{
"dayWeek": "Monday",
"hourStart": "12:00:00",
"endHour": "13:00:00"
},
{
"dayWeek": "Monday",
"hourStart": "16:15:00",
"endHour": "19:00:00"
},
{
"dayWeek": "Tuesday",
"hourStart": "16:15:00",
"endHour": "19:00:00"
},
{
"dayWeek": "Thursday",
"hourStart": "10:00:00",
"endHour": "13:30:00"
},
{
"dayWeek": "Thursday",
"hourStart": "14:00:00",
"endHour": "19:15:00"
},
{
"dayWeek": "Saturday",
"hourStart": "10:00:00",
"endHour": "12:00:00"
},
{
"dayWeek": "Saturday",
"hourStart": "14:00:00",
"endHour": "17:00:00"
},
{
"dayWeek": "Sunday",
"hourStart": "8:00:00",
"endHour": "12:00:00"
}
]
},
{
"shopId": 2,
"name": "Climb up",
"address": "Plaine sportive, 110 Rue Jean Jaurès, 59810 Lesquin",
"description": "Depuis plus de 15 ans nous cultivons la diversité au sein de nos structures. Diversité de profils, de visions et de sensibilités. Nos nombreux échanges ont ainsi donné jour à un concept de salles d’escalade pensées comme des lieux de vie ouverts à tous.",
"email": "climbup@contact.fr",
"phone": "03 20 07 57 42",
"localisation": {
"lat": 50.5865602,
"long": 3.1071495
},
"vidoLink": "https://www.youtube.com/watch?v=3-3a9GghAR0&ab_channel=ClimbUp",
"pictures": [{
"idPicture": 3,
"link": "https://zupimages.net/up/21/02/z8st.jpg"
},
{
"idPicture": 4,
"link": "https://zupimages.net/up/21/02/6yh3.jpg"
}
],
"openShop": [{
"dayWeek": "Monday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Tuesday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Wednesday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Thursday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Friday",
"hourStart": "8:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Saturday",
"hourStart": "10:00:00",
"endHour": "23:00:00"
},
{
"dayWeek": "Sunday",
"hourStart": "8:00:00",
"endHour": "12:00:00"
}
]
}
]
}
有我的DTO:
export class ShopEntity {
shops : ShopDto[];
}
export class ShopDto {
@Expose({
name: 'shopId'
})
id: number;
name: string;
address: string;
description: string;
email: string;
phone: string;
localisation: {
lat: number;
long: number;
}
videoLink: string;
offers: OfferDto[];
pictures: PictureDto[];
openShop: OpenShopDto[];
}
这是我的代码行:
let shopsTab = plainToClass(ShopEntity, body);
我成功地从 ShopEntity 获取了我的第一个对象,但标签商店未定义。
对于所有子对象,您应该添加 @Type(() => ChildObjectType)
。由于泛型如何反映在打字稿中,数组不会以其他方式序列化。作为一般规则,当我在 class-transformer
中处理子对象时,我确保添加 @Type()
装饰器。