object[] DeserializeParameter(Type serviceType, XmlNode[] paramNodes, ParameterInfo[] parameterInfos)
{
var parser = new XmlParser(Configuration);
var parameterObjects = new List <object>();
var paramterCount = GetParamsPos(parameterInfos) ?? parameterInfos.Length;
for (int i = 0; i < paramterCount; i++)
{
var paramNode = paramNodes[i];
var valueNode = paramNode.SelectSingleNode("value");
if (valueNode == null)
{
throw new XmlRpcInvalidXmlRpcException("Missing value element.");
}
var node = valueNode.SelectValueNode();
if (serviceType != null)
{
_parseStack.Push($"parameter {i + 1}");
var parsedValue = parser.ParseValue(node, parameterInfos[i].ParameterType, _parseStack);
parameterObjects.Add(parsedValue);
}
else
{
_parseStack.Push($"parameter {i}");
var parsedValue = parser.ParseValue(node, null, _parseStack);
parameterObjects.Add(parsedValue);
}
_parseStack.Pop();
}
return(parameterObjects.ToArray());
}