0.0.3 • Published 3 years ago

@lab900/typescript-serializer v0.0.3

Weekly downloads
15
License
-
Repository
github
Last release
3 years ago

Lab900 - Typescript Serializer

How to

Annotate classes for serialization

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

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:

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);
  }
}