public object CallFunction(string functionName, params object[] args) { string serializedArguments = string.Empty; int argumentCount = args.Length; if (argumentCount == 1) { object value = args[0]; serializedArguments = SimplisticJsSerializer.Serialize(value); } else if (argumentCount > 1) { var serializedArgumentsBuilder = new StringBuilder(); for (int argumentIndex = 0; argumentIndex < argumentCount; argumentIndex++) { object value = args[argumentIndex]; string serializedValue = SimplisticJsSerializer.Serialize(value); if (argumentIndex > 0) { serializedArgumentsBuilder.Append(", "); } serializedArgumentsBuilder.Append(serializedValue); } serializedArguments = serializedArgumentsBuilder.ToString(); } object result = Evaluate(string.Format("{0}({1});", functionName, serializedArguments)); return(result); }
protected override object InnerCallFunction(string functionName, params object[] args) { string functionCallExpression; int argumentCount = args.Length; if (argumentCount > 0) { string[] serializedArgs = new string[argumentCount]; for (int argumentIndex = 0; argumentIndex < argumentCount; argumentIndex++) { object value = args[argumentIndex]; string serializedValue = SimplisticJsSerializer.Serialize(value); serializedArgs[argumentIndex] = serializedValue; } var stringBuilderPool = StringBuilderPool.Shared; StringBuilder functionCallBuilder = stringBuilderPool.Rent(); functionCallBuilder.Append(functionName); functionCallBuilder.Append("("); for (int argumentIndex = 0; argumentIndex < argumentCount; argumentIndex++) { string serializedValue = serializedArgs[argumentIndex]; if (argumentIndex > 0) { functionCallBuilder.Append(", "); } functionCallBuilder.Append(serializedValue); } functionCallBuilder.Append(");"); functionCallExpression = functionCallBuilder.ToString(); stringBuilderPool.Return(functionCallBuilder); } else { functionCallExpression = string.Format("{0}();", functionName); } object result = Evaluate(functionCallExpression); return(result); }