JSON serialization/deserialization of Typescript objects
npm install @lab900/typescript-serializernpm i @lab900/typescript-serializer
Make sure your tsconfig compilerOptions contains following options:
```
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
`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;
}
`
`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);
`
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 {
return this.http.post>(this.apiUrl, toCreate);
}
@Deserialize(ResponseEntity) // deserialize the response to ResponseEntity
public getAll(): Observable {
return this.http.get>(this.apiUrl);
}
}
``