npm install --save tserialize
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Ρ Π³ΠΈΡΡ Π°Π±Π°
npm install https://github.com/SoEasy/tserialize/tarball/master
ΠΠ΅ΡΡΠΈΡ ΠΏΠΎΠ΄Π½ΡΠ»Π°ΡΡ Π΄ΠΎ 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
- Π€ΡΠ½ΠΊΡΠΈΠΈ
- ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΡ Π΄Π°Π½Π½ΡΡ
- Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°
- ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡΡ
- ΠΠ°Π·ΠΎΠ²ΡΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ JsonName
- ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ JsonNameReadonly
- ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² JsonStruct
- ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ JsonMeta
- ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² JsonArray
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° 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
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅ΡΠ΅ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π»Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° Π² ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
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<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' }
ΠΠΎΠ΄ΠΎΠ±Π΅Π½ JsonName Ρ ΠΎΠ±Π½ΡΠ»ΡΡΡΠΈΠΌ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ.
ΠΡΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»Π΅ ΠΏΠΎΠ΄ ΡΡΠΈΠΌ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
JsonNameReadonly<T>(
name?: string,
deserialize?: (serverObj: any) => T)
)
- name - Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°, ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΌ Π² ΡΠΈΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π»Π΅ΠΆΠΈΡ Π½ΡΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- deserialize - ΡΡΠ½ΠΊΡΠΈΡ, "ΠΎΡΠΈΡΠ°ΡΡΠ°Ρ" Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈ deserialize
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»Ρ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ»ΠΈ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ 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 } }
ΠΠΎΠ΄ΠΎΠ±Π΅Π½ 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
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ/Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ 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 } ] }
- JsonRaw
MIT