private _customDeserializeObject()

in src/XDM.ts [549:595]


    private _customDeserializeObject(obj: Object, circularRefs: { [key: number]: Object }): any {
        var that = this;

        if (!obj) {
            return null;
        }

        var deserializeMember = (parentObject: any, key: any) => {
            var item = parentObject[key];
            var itemType = typeof item;

            if (key === "__circularReferenceId" && itemType === 'number') {
                circularRefs[item] = parentObject;
                delete parentObject[key];
            }
            else if (itemType === "object" && item) {

                if (item.__proxyFunctionId) {
                    parentObject[key] = function () {
                        return that.invokeRemoteMethod("proxy" + item.__proxyFunctionId, "__proxyFunctions", Array.prototype.slice.call(arguments, 0), {}, { includeUnderscoreProperties: true });
                    }
                }
                else if (item.__proxyDate) {
                    parentObject[key] = new Date(item.__proxyDate);
                }
                else if (item.__circularReference) {
                    parentObject[key] = circularRefs[item.__circularReference];
                }
                else {
                    this._customDeserializeObject(item, circularRefs);
                }
            }
        };

        if (obj instanceof Array) {
            for (var i = 0, l = obj.length; i < l; i++) {
                deserializeMember(obj, i);
            }
        }
        else if (typeof obj === "object") {
            for (var key in obj) {
                deserializeMember(obj, key);
            }
        }

        return obj;
    }