import 'reflect-metadata';
import { AbstractType } from '../type';
/**
 * Base class for serializable objects.
 *
 * @export
 * @abstract
 * @class Serializable
 */
export declare abstract class Serializable {
    private static _typeFullNameKey;
    private static _typeNamespaceKey;
    /**
     * Gets or sets the name of the key holding the type's full name.
     *
     * @static
     * @type {string}
     * @memberof Serializable
     */
    static get TypeFullNameKey(): string;
    static set TypeFullNameKey(value: string);
    /**
     * Sets the type name for serialization/deserialization purposes.
     *
     * @static
     * @template T
     * @param {AbstractType} type The type where the full name should be set.
     * @param {string} typeFullName The type's full name.
     *
     * @memberOf Serializable
     */
    static setTypeFullName(type: AbstractType, typeFullName: string): void;
    /**
     * Sets the type namespace for serialization/deserialization purposes.
     *
     * @static
     * @template T
     * @param {AbstractType} type The type where the type name should be set.
     * @param {string} namespace The type namespace.
     *
     * @memberOf Serializable
     */
    static setTypeNamespace(type: AbstractType, namespace: string): void;
    /**
     * Gets the type's full name for serialization/deserialization purposes.
     *
     * @static
     * @param {{} | AbstractType} typeOrInstance The type from where the type name should be retrieved.
     * @returns {(string | undefined)} The type's full name.
     *
     * @memberOf Serializable
     */
    static getTypeFullName(typeOrInstance: {} | AbstractType): string | undefined;
    /**
     * Gets the type namespace for serialization/deserialization purposes.
     *
     * @static
     * @param {AbstractType} typeOrInstance The type from where the type name should be retrieved.
     * @returns {(string | undefined)} The type name.
     *
     * @memberOf Serializable
     */
    static getTypeNamespace(typeOrInstance: AbstractType): string | undefined;
    /**
     * Converts the provided object to a JSON representation.
     *
     * @static
     * @param {object} obj The object to be converted.
     * @returns {*} The object containing the JSON representation.
     * @memberof Serializable
     */
    static getJSON(obj: object): {};
    /**
     * Converts the provided object to a string.
     *
     * @static
     * @param {object} obj The object to be converted.
     * @returns {string} The object's string representation.
     * @memberof Serializable
     */
    static getString(obj: object): string;
    /**
     * Converts this object to a JSON representation.
     *
     * @returns {{}}
     *
     * @memberOf Serializable
     */
    toJSON(): any;
    /**
     * Converts this object to a string.
     *
     * @returns {string}
     *
     * @memberOf Serializable
     */
    toString(): string;
}
