projects/wms-framework/src/lib/baseframework/TypeSerializers/SerializerFactory.ts
Deserializer for types which required special deserialization
Methods |
Deserialize | ||||||
Deserialize(obj: unknown)
|
||||||
Deserialize object with special deserialization
Parameters :
Returns :
T
|
import { SimpleDictionary } from '../SimpleDictionary';
import { DateSerializer } from './DateSerializer';
import { GuidSerializer } from './GuidSerializer';
import { IListSerializer } from './IListDeserializer';
import { SimpleDictionarySerializer } from './SimpleDictionarySerializer';
import { TimeRangeSerializer } from './TimeRangeSerializer';
import { UriSerializer } from './UriSerializer';
/**
* Base serializer for types which required special serialization
*
* @export
* @abstract
* @class BaseSerializer
* @template T
*/
export interface BaseSerializer<T> {
/**
* Serialize an object with required special serialization to string
*
* @abstract
* @template T
* @param {T} object
* @returns {String}
* @memberof BaseSerializer
*/
Serialize(object: T): any;
}
/**
* Deserializer for types which required special deserialization
*
* @export
* @abstract
* @class BaseDeserializer
* @template T
*/
export interface BaseDeserializer<T> {
/**
* Deserialize object with special deserialization
*
* @abstract
* @param {unknown} obj
* @returns {T}
* @memberof BaseSerializer
*/
Deserialize(obj: unknown): T;
}
/**
* Interface for both serializer and deserializer objects
*
* @export
* @interface SerializerAndDeserializer
* @extends {BaseDeserializer<T>}
* @extends {BaseSerializer<T>}
* @template T
*/
export interface SerializerAndDeserializer<T>
extends BaseDeserializer<T>,
BaseSerializer<T> {}
/**
* Serializer Factory
*
* @export
* @class SerializerFactory
*/
export class SerializerFactory {
/**
* The serializers for primitives for WCF
*
* @private
* @type {SimpleDictionary<string, BaseSerializer<any>>}
* @memberof SerializerFactory
*/
private serializers: SimpleDictionary<string, BaseSerializer<any>>;
/**
* The deserializers
*
* @private
* @type {SimpleDictionary<string, BaseSerializer<any>>}
* @memberof SerializerFactory
*/
private deserializers: SimpleDictionary<string, BaseDeserializer<any>>;
/**
*Creates an instance of SerializerFactory.
* @memberof SerializerFactory
*/
constructor() {
this.loadSerializationAndDeserializationClasses();
}
/**
* Get serializer by type name
*
* @template T
* @param {string} typeName
* @returns {BaseSerializer<T>}
* @memberof SerializerFactory
*/
getSerializer<T>(typeName: string): BaseSerializer<T> {
if (this.serializers.containsKey(typeName)) {
return this.serializers.getItem(typeName);
} else {
return null;
}
}
/**
* Gets the deserializer object if it exists
*
* @param {*} Name
* @memberof SerializerFactory
*/
getDeserializer<T>(typeName: any): BaseDeserializer<T> {
if (this.deserializers.containsKey(typeName)) {
return this.deserializers.getItem(typeName);
} else {
return null;
}
}
private loadSerializationAndDeserializationClasses() {
this.serializers = new SimpleDictionary();
this.deserializers = new SimpleDictionary();
const dateSupport = new DateSerializer();
const guidSupport = new GuidSerializer();
const timeRangeSupport = new TimeRangeSerializer();
const simpleDictionarySupport = new SimpleDictionarySerializer();
const uriSupport = new UriSerializer();
this.serializers.addEntry('Date', dateSupport);
this.serializers.addEntry('Guid', guidSupport);
this.serializers.addEntry('TimeRange', timeRangeSupport);
this.serializers.addEntry('Uri', uriSupport);
this.deserializers.addEntry('Date', dateSupport);
this.deserializers.addEntry('Guid', guidSupport);
this.deserializers.addEntry('TimeRange', timeRangeSupport);
this.deserializers.addEntry(
'System.Collections.Generic.IList`1',
new IListSerializer()
);
this.deserializers.addEntry(
'System.Collections.Generic.ICollection`1',
new IListSerializer()
);
this.deserializers.addEntry(
'System.Collections.IList',
new IListSerializer()
);
this.deserializers.addEntry('SimpleDictionary', simpleDictionarySupport);
this.deserializers.addEntry('Uri', uriSupport);
}
}