                 }
                 return funcDesc
             # serialize object
+            if lodash.isArray(obj)
+                objDesc = @__newRemoteArrayDesc(id, @host, @port)
+                #we only care elements in array
+                #if the array has member function
+                for element in obj
+                    objDesc.__r_arr.push(@__serializeObject(element,map))
+                return objDesc
+                
+            
             objDesc = @__newRemoteObjectDesc(id, @host, @port)
             for k, v of obj
                 if @_isPrivate(k, obj.__r_skip)

        @__serializeObject(obj, {})

    #append remote markers to existing object or create a new object with remote markers
    __addRemoteMarkers : (id, host, port, type, source)->
        result = if source? then source else {}
        result.__r_id = id
        result.__r_type = type

        func = do (_this, host, port ,id)->
            ()->
                _this.invokeRemoteMethod(host, port, id, arguments)
        @__appendRemoteMarker(func, desc, context, 'function')
        return func

    __findInMap : (desc, context, map) ->
