LabEG / Serializable

Small library for deserialization and serialization for javascript and typescript
MIT License
62 stars 10 forks source link

added camelCase naming strategy #9

Closed hatamsoyunov closed 1 year ago

hatamsoyunov commented 1 year ago

При работе с данными апи, где поля называются в PascalCase, а проект на React, где PascalCase используется в основном для названия компонентов, приходиться как-то поменять названии полей 👎

В этом вопросе namingStrategy очень вручает 👍, но если сервер в POST/PUT запросах, также ожидает данные, где поля называются в PascalCase, то не хватает CamelCaseNamingStrategy, поэтому я ее добавил и прошу принять PR.

Пример: EmployeeModel.ts

@jsonObject({ namingStrategy: new PascalCaseNamingStrategy() })
export class EmployeeModel extends Serializable {
  @jsonProperty(Number, null) employeeId: number | null = null;
  @jsonProperty(String, null) lastName: string | null = null;
  @jsonProperty(String, null) firstName: string | null = null;
  @jsonProperty(String, null) email: string | null = null;
}
{
  "EmployeeId": 1,
  "LastName": "Иван",
  "FirstName": "Иванов",
  "Email": "ivan123@test.ru",
}
const employee = new EmployeeModel().fromJSON(json);

EmployeeDto.ts - для создания/обновление данных сотрудника.

@jsonObject({ namingStrategy: new CamelCaseNamingStrategy() })
export class EmployeeDto extends Serializable {
  @jsonProperty(String, null) LastName: string | null = null;
  @jsonProperty(String, null) FirstName: string | null = null;
  @jsonProperty(String, null) Email: string | null = null;
}
const formValues = {
  lastName: "Иван",
  firstName: "Иванов",
  email: "ivanIvanov@example.com"
}

const dto = new EmployeeDto().fromJSON(formValues);

Спасибо за отличный инструмент 🤝

LabEG commented 1 year ago

Спасибо за реквест! Слил. Сегодня будет в npm.

У вас C# на бекенде? Обычно в C# эта конвертация происходит на стороне сервера перед выдачей клиенту, не ожидал встретить востребованность в такой конвертации =)

hatamsoyunov commented 1 year ago

Спасибо! Возможно, не могу сказать на чем написан бэк, меня только недавно подключили к проекту, сказали пока не могут конвертировать и я решил на фронте это делать.

А так уже больше 3 года пользуюсь вашей библиотекой, очень помогает 🔥