UNPKG

@lab900/typescript-serializer

Version:

JSON serialization/deserialization of Typescript objects

90 lines (67 loc) 2.08 kB
# Lab900 - Typescript Serializer ## How to ### Annotate classes for serialization ```typescript import { Entity, JsonProperty } from '@lab900/typescript-serializer'; @Entity() class MyEntity { @JsonProperty() public exampleProp: string; @JsonProperty({arrayType: string}) public exampleProp2: string[]; @JsonProperty() public exampleProp2: number; /** * A custom (de)serializer can be provided */ @JsonProperty({ deserializer: (value) => any, serializer: (value) => any }) public nestedEntity: any; /** * Entities can be nested */ @JsonProperty() public nestedEntity: OtherEntity; } @Entity() class OtherEntity { @JsonProperty() public otherProp: string; } ``` ### Serialize & deserialize ```typescript import { Entity, JsonProperty, serialize, deserialize } from '@lab900/typescript-serializer'; @Entity() class MyEntity { @JsonProperty() public exampleProp: string; } // coverts JSON to an instance of MyEntity const deserializedEntity: MyEntity = deserialize({exampleProp: 'test'}, MyEntity); // converts an instance of MyEntity to JSON const serialized: Object = serialize(deserializedEntity, MyEntity); ``` ### Angular service example: ```typescript import { Serialize, SerializeParam, Deserialize } from '@lab900/typescript-serializer'; @Injectable({ providedIn: 'root' }) export class ExampleService { private readonly apiUrl = 'http://example.com/api'; constructor( private http: HttpClient, ) {} @Serialize() // serialize all params with the SerializeParam decorator @Deserialize(ResponseEntity) // deserialize the response to ResponseEntity public create( @SerializeParam(CreateEntity) toCreate: CreateEntity // serialize this param to CreateEntity before the method is applied ): Observable<ResponseEntity> { return this.http.post<ApiResult<any>>(this.apiUrl, toCreate); } @Deserialize(ResponseEntity) // deserialize the response to ResponseEntity public getAll(): Observable<ResponseEntity[]> { return this.http.get<ApiResult<any>>(this.apiUrl); } } ```