Skip to content

SoEasy/tserialize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

88 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ сСриализации/дСсСриализации для TypeScript ΠΈ ES6

Build Status

Установка

npm install --save tserialize

Установка с Π³ΠΈΡ‚Ρ…Π°Π±Π°

npm install https://github.com/SoEasy/tserialize/tarball/master

Change overview

ВСрсия поднялась Π΄ΠΎ 1.4.0

  • ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
  • BсправлСны Π±Π°Π³ΠΈ ΠΏΡ€ΠΈ наслСдовании ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
  • Начался процСсс ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ reflect-metadata

Основная информация

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с бэкэндом ΠΈ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ источниками Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΆΠ΅Π»Π°ΡŽΡ‚(ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚) Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ поля Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ - использования ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инкапсуляции Π½Π°Π΄ сырыми Π΄Π°Π½Π½Ρ‹ΠΌΠΈ - ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ сырыС Π΄Π°Π½Π½Ρ‹Π΅ Π² экзСмпляр Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ класса ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌ.

НапримСр Π΅ΡΡ‚ΡŒ источник Π΄Π°Π½Π½Ρ‹Ρ…:

data = {
    field_one: 1,
    field_two: 2,
    ...
    field_ten: 10
}

И класс

class ProgressionClass {
    fieldOne: number;
    fieldTwo: number;
    fieldThree: number;
    ...
    fieldTen: number;

    firstFiveSum(): number {
        return this.fieldOne + this.fieldTwo + fieldThree;
    }

    lastTwoSum(): number {
        return this.fieldNine + this.fieldTen;
    }
}

Π—Π°Π΄Π°Ρ‡Π° - ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр класса ProgressionClass с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ data. НСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

  • ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π² конструктор
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°Π±Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… экзСмпляр
  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСт ΠΊ экзСмпляру ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих способов Ρ‚Ρ€Π΅ΡƒΠ±ΡƒΠ΅Ρ‚ написания ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ для описания ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ.

import { deserialize, JsonName } from 'teserialize';

class ProgressionClass {
    @JsonName('field_one')
    fieldOne: number;

    @JsonName('field_two')
    fieldTwo: number;

    @JsonName('field_three')
    fieldThree: number;
    ...

    static fromServer(data: object): ProgressionClass {
        return deserialize(data, ProgressionClass);
    }
}

const data = {
    field_one: 1,
    field_two: 2,
    ...
    field_ten: 10
}

const progressionInstance = ProgressionClass.fromServer(data);

console.log(progressionInstance.fieldTwo); // 2

API

deserialize

Ѐункция ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° tserialize, Π½ΡƒΠΆΠ½Π° для прСвращСния сырых Π΄Π°Π½Π½Ρ‹Ρ… Π² экзСмпляр класса

Π˜ΠΌΠΏΠΎΡ€Ρ‚
import { deserialize } from 'tserialize';
Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
function deserialize<T>(rawData: any, TargetClass: { new (...args: Array<any>): T }): T
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
class Foo {}

const fooInstance = deserialize<Foo>(rawData, Foo);
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

РСкомСндуСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ deserialize ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π² static-ΠΌΠ΅Ρ‚ΠΎΠ΄ вашСго класса ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ fromServer.

class Foo {
    static fromServer(data: object): Foo {
        return deserialize<Foo>(data, Foo);
    }
}
  • Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это красиво - "Π­ΠΉ, класс, Π΄Π°ΠΉ ΠΌΠ½Π΅ свой экзСмпляр Π½Π° основС этих Π΄Π°Π½Π½Ρ‹Ρ…"
  • Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя static-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ JsonStruct ΠΈ JsonMeta.
  • Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ fromServer ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

serialize

Ѐункция ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° для прСвращСния экзСмпляра класса Π² сырыС Π΄Π°Π½Π½Ρ‹Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π½Π° сСрвСр.

Π˜ΠΌΠΏΠΎΡ€Ρ‚
import { serialize } from 'teserialize';
Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
function serialize(model: { [key: string]: any }): object
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
class Foo {}

const fooInstance = new Foo();
const dataToServer = serialize(fooInstance);
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

РСкомСндуСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ serialize ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ вашСго класса ΠΈ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ toServer.

class Foo {
    toServer(): object {
        return serialize(this);
    }
}
  • Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это красиво - "Π­ΠΉ, экзСмпляр, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡΡŒ Π² Π²ΠΈΠ΄ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° сСрвСр"
  • Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, это Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ имя ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ JsonStruct ΠΈ JsonMeta.
  • Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ toServer ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

JsonName

ΠŸΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π΅ сСриализации. Π‘Π°ΠΌΡ‹ΠΉ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ.

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
JsonName<T>(
            name?: string,
            serialize?: (obj: T, instance: any) => any,
            deserialize?: (serverObj: any) => T)
        )
  • name - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² чистых Π΄Π°Π½Π½Ρ‹Ρ… Π»Π΅ΠΆΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если отсутствуСт - Π±ΡƒΠ΄Π΅Ρ‚ использовано Π½Π°Π·Π²Π°Π½ΠΈΠ΅ поля.
  • serialize - функция, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ serialize. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля null/undefined, ΠΈΠ»ΠΈ функция-сСриализатор Π²Π΅Ρ€Π½Π΅Ρ‚ null/undefined - ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² сСриализованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
  • deserialize - функция, "ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‰Π°Ρ" Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ deserialize
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
class Foo {
    @JsonName()
    firstName: string;

    @JsonName('last_name, value => value.toUpperCase())
    lastName: string;

    @JsonName('sex', value => value ? 'M' : 'F', value: string => value === 'M' : true : false)
    sex: boolean;

    @JsonName()
    alwaysNull: string = null; // ПолС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π΄Π°Π»Π΅Π΅ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сСриализации

    @JsonName('always_null_2', () => null)
    alwaysNull2: string;

    toServer(): object {
        return serialize(this);
    }
}

const f = new Foo();
f.firstName = 'Name';
f.lastName = 'Last';
f.sex = true;
f.alwaysNull2 = 'hello'; // Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ null, Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
const serialized = f.toServer(); // { firstName: 'Name', last_name: 'LAST', sex: 'M' }

JsonNameReadonly

ПодобСн JsonName с ΠΎΠ±Π½ΡƒΠ»ΡΡŽΡ‰ΠΈΠΌ сСриализатором. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ.

ΠŸΡ€ΠΈ сСриализации ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ΄ этим Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
JsonNameReadonly<T>(
            name?: string,
            deserialize?: (serverObj: any) => T)
        )
  • name - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² чистых Π΄Π°Π½Π½Ρ‹Ρ… Π»Π΅ΠΆΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  • deserialize - функция, "ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‰Π°Ρ" Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈ deserialize

JsonStruct

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ для сСриализации Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊ ΠΆΠ΅ поля Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ для сСриализации.

Если Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ классС Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ fromServer - ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ использован для дСсСриализации. Если Π½Π΅Ρ‚ - вызовСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ deserialize

Если Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ классС Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ toServer - ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ использован для сСриализации. Если Π½Π΅Ρ‚ - вызовСтся ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ serialize

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
function JsonStruct(
    proto: any
    name?: string
)
  • proto - конструктор класса Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ структуры
  • name - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° для Π΄Π°Π½Π½Ρ‹Ρ…
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
class SysInfo {
    @JsonName('operation_system')
    name: string;

    @JsonName()
    version: number;
}

class Computer {
    @JsonStruct(SysInfo, 'sys_info')
    os: SysInfo;

    @JsonName()
    ram: number;

    static fromServer(data: object): Computer {
        return deserialize(data, Computer);
    }
}

const data = { ram: 8, sys_info: { operation_system: 'Win', version: 10 } };
const instance = Computer.fromServer(data);
// { ram: 8, os: { name: 'Win', version: 10 } }

JsonMeta

ПодобСн JsonStruct, Π½ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Ρ€Π΅Ρ‚ Π½Π΅ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π°, Π° ΠΈΠ· исходного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НуТСн для прСобразования плоских-ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ‚Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. НапримСр, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ чистых Π΄Π°Π½Π½Ρ‹Ρ… содСрТит ΠΎΠ²Π΅Ρ€9000 ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠΊΠ΅ относятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ сущностям. И Π²Ρ‹, ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сущности.

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
function JsonMeta(proto: any)
  • proto - конструктор класса, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ плоская структура
ΠŸΡ€ΠΈΠΌΠ΅Ρ€
class SysInfo {
    @JsonName('operation_system')
    name: string;

    @JsonName('os_version')
    version: number;
}

class Computer {
    @JsonMeta(SysInfo)
    os: SysInfo;

    @JsonName()
    ram: number;

    static fromServer(data: object): Computer {
        return deserialize(data, Computer);
    }
}

const data = { ram: 8, operation_system: 'Win', os_version: 10 }; // flat data
const instance = Computer.fromServer(data);
// { ram: 8, os: { name: 'Win', version: 10 } } // composite model

JsonArray

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ для сСриализации/дСсСриализации массивов сСриализуСмых экзСмпляров. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ toServer/static fromServer Ссли ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ, Π° Ссли Π½Π΅Ρ‚ - Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ serialize/deserialize

Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π°
function JsonArray(proto, name)

proto - класс, экзСмпляры ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² массивС

ΠŸΡ€ΠΈΠΌΠ΅Ρ€
class Person {
    @JsonName('name') personName: string;
    @JsonName() phone: string;

    constructor(personName, phone) {
        Object.assign(this, { personName, phone });
    }
}

class PhoneBook {
    @JsonArray(Person, 'records')
    persons: Array<Person> = [];
}

const book = new PhoneBook();
book.persons.push(new Person('Mike', '1'));
book.persons.push(new Person('Jane', '2'));
const data = serialize(book);
// { records: [ {name: 'Mike', phone: 1 }, { name: 'Jane', phone: 2 } ] }

TODO

  • JsonRaw

LICENCE

MIT