File

projects/wms-framework/src/lib/baseframework/TypeSerializers/SerializerFactory.ts

Description

Serializer Factory

Index

Properties
Methods

Constructor

constructor()

Creates an instance of SerializerFactory.

Properties

Private deserializers
Type : SimpleDictionary<string | BaseDeserializer<any>>

The deserializers

Private serializers
Type : SimpleDictionary<string | BaseSerializer<any>>

The serializers for primitives for WCF

Methods

getDeserializer
getDeserializer(typeName: any)
Type parameters :
  • T

Gets the deserializer object if it exists

Parameters :
Name Type Optional
typeName any No
getSerializer
getSerializer(typeName: string)
Type parameters :
  • T

Get serializer by type name

Parameters :
Name Type Optional
typeName string No
Returns : BaseSerializer<T>
Private loadSerializationAndDeserializationClasses
loadSerializationAndDeserializationClasses()
Returns : void
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);
  }
}

result-matching ""

    No results matching ""