public object[] BindServerResult(MethodInfo mi, PhpArray result, bool wrappedArgs) { var resultParams = new List<object>(); var parameterInfos = new List<ParameterInfo>(); parameterInfos.Add(mi.ReturnParameter); parameterInfos.AddRange(mi.GetParameters().Where(a=>a.IsOut)); object value; if (!wrappedArgs) { //TODO: make sure: When arguments are not wrapped soap method parameter is only one Debug.Assert(parameterInfos.Count == 1); resultParams.Add(Bind(result, parameterInfos[0].ParameterType)); } else { foreach (var pi in parameterInfos) { if (SetSpecifiedParameter(resultParams, pi)) continue; var name = WsdlHelper.GetParameterSoapName(pi); if (result.TryGetValue(name, out value)) { resultParams.Add(Bind(value, pi.ParameterType)); } } } lastPrimitive = false; return resultParams.ToArray(); }
public object[] BindParams(MethodInfo mi, PhpArray parameters, bool wrappedArgs) { var resultParams = new List<object>(); var parameterInfos = mi.GetParameters(); object value; if (!wrappedArgs) { //TODO: make sure: When arguments are not wrapped soap method parameter is only one Debug.Assert(parameterInfos.Length == 1); resultParams.Add(Bind(parameters, parameterInfos[0].ParameterType)); } else { foreach (var pi in parameterInfos) { if (SetSpecifiedParameter(resultParams, pi)) continue; value = null; if (parameters == null || parameters.TryGetValue(pi.Name, out value)) { resultParams.Add(Bind(value, pi.ParameterType)); } else { resultParams.Add(pi.ParameterType.IsValueType ? Activator.CreateInstance(pi.ParameterType) : null); } } } lastPrimitive = false; return resultParams.ToArray(); }
private object BindArrayToObject(PhpArray array, Type targetType) { object instance = Activator.CreateInstance(targetType);// no ctor parameters FieldInfo[] fi = targetType.GetFields(BindingFlags.Public | BindingFlags.Instance); object value; foreach (var field in fi) { if (SetSpecifiedField(instance, field)) continue; if (array.TryGetValue(field.Name, out value)) { field.SetValue(instance, Bind(value, field.FieldType)); } } lastPrimitive = false; return instance; }