javascript - 如何通过类转换器识别子对象? | Nest.js

标签 javascript nestjs class-transformer

我正在尝试使用“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": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7c0c150f1f151219111d0e15090f10191f10190e1f0d3c1f1312081d1f08521a0e" rel="noreferrer noopener nofollow">[email protected]</a>",
      "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": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="91f2fdf8fcf3e4e1d1f2feffe5f0f2e5bff7e3" rel="noreferrer noopener nofollow">[email protected]</a>",
      "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)。由于泛型在 typescript 中的反射(reflect)方式,数组不会序列化。作为一般规则,当我使用 class-transformer 中的子对象时,我确保添加 @Type() 装饰器。

关于javascript - 如何通过类转换器识别子对象? | Nest.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65718545/

相关文章:

php - 可折叠面板在我的循环中每次都会增加它的 id

javascript - 在 React/Redux 中设置计时器以发送刷新身份验证 token 的最佳方法

javascript - 如何消除以下错误。尝试创建一个函数来在 mscrm 中创建实体的记录

handlebars.js - 如何在 NestJs 邮件程序中注册 Handlebars Intl 助手

javascript - 如何使用 Jest 模拟第三方库

javascript - 使用javascript选择计算税率

nestjs - 如何使用fastify在nestjs中设置响应头

node.js - 如何使用 NestJS 序列化返回 id 字符串而不是 _bsontype

Nestjs applyDecorators 用于多个装饰器