@lab900/typescript-serializer
v0.0.3
Published
JSON serialization/deserialization of Typescript objects
Downloads
90
Maintainers
Readme
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);
}
}