-// \r
-// System.Web.Services.Protocols.ValueCollectionParameterReader.cs\r
-//\r
-// Author:\r
-// Tim Coleman (tim@timcoleman.com)\r
-// Lluis Sanchez Gual (lluis@ximian.com)\r
-//\r
-// Copyright (C) Tim Coleman, 2002\r
-//\r
+//
+// System.Web.Services.Protocols.ValueCollectionParameterReader.cs
+//
+// Author:
+// Tim Coleman (tim@timcoleman.com)
+// Lluis Sanchez Gual (lluis@ximian.com)
+//
+// Copyright (C) Tim Coleman, 2002
+//
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System.Collections.Specialized;\r
-using System.Reflection;\r
-using System.Web;\r
-using System.Xml;\r
-\r
-namespace System.Web.Services.Protocols {\r
- public abstract class ValueCollectionParameterReader : MimeParameterReader {\r
-\r
- ParameterInfo[] parameters;\r
-\r
- #region Constructors\r
-\r
- protected ValueCollectionParameterReader () \r
- {\r
- }\r
- \r
- #endregion // Constructors\r
-\r
- #region Methods\r
-\r
- public override object GetInitializer (LogicalMethodInfo methodInfo)\r
- {\r
- if (IsSupported (methodInfo)) return methodInfo.Parameters;\r
- else return null;\r
- }\r
-\r
- public override void Initialize (object o)\r
- {\r
- parameters = (ParameterInfo[]) o;\r
- }\r
-\r
- public static bool IsSupported (LogicalMethodInfo methodInfo)\r
- {\r
- foreach (ParameterInfo param in methodInfo.Parameters)\r
- if (!IsSupported (param)) return false;\r
- return true;\r
- }\r
-\r
- public static bool IsSupported (ParameterInfo paramInfo)\r
- {\r
- Type type = paramInfo.ParameterType;\r
- if (type.IsByRef || paramInfo.IsOut) return false;\r
- if (type.IsArray) return IsSupportedPrimitive (type.GetElementType());\r
- else return IsSupportedPrimitive (type);\r
- }\r
- \r
- internal static bool IsSupportedPrimitive (Type type)\r
- {\r
- return ( type.IsPrimitive || \r
- type == typeof(string) ||\r
- type == typeof(DateTime) ||\r
- type == typeof(Decimal)\r
- );\r
- }\r
-\r
- protected object[] Read (NameValueCollection collection)\r
- {\r
- object[] res = new object [parameters.Length];\r
- for (int n=0; n<res.Length; n++)\r
- {\r
- string val = collection [parameters[n].Name];\r
- if (val == null) throw new InvalidOperationException ("Missing parameter: " + parameters[n].Name);\r
- try\r
- {\r
- res [n] = StringToObj (parameters[n].ParameterType, val);\r
- }\r
- catch (Exception ex)\r
- {\r
- string error = "Cannot convert '" + val + "' to " + parameters[n].ParameterType.FullName + "\n";\r
- error += "Parameter name: " + parameters[n].Name + " --> " + ex.Message;\r
- throw new InvalidOperationException (error);\r
- }\r
- }\r
- return res;\r
- }\r
- #endregion // Methods\r
- }\r
+
+using System.Collections.Specialized;
+using System.Reflection;
+using System.Web;
+using System.Xml;
+
+namespace System.Web.Services.Protocols {
+ public abstract class ValueCollectionParameterReader : MimeParameterReader {
+
+ ParameterInfo[] parameters;
+
+ #region Constructors
+
+ protected ValueCollectionParameterReader ()
+ {
+ }
+
+ #endregion // Constructors
+
+ #region Methods
+
+ public override object GetInitializer (LogicalMethodInfo methodInfo)
+ {
+ if (IsSupported (methodInfo)) return methodInfo.Parameters;
+ else return null;
+ }
+
+ public override void Initialize (object o)
+ {
+ parameters = (ParameterInfo[]) o;
+ }
+
+ public static bool IsSupported (LogicalMethodInfo methodInfo)
+ {
+ foreach (ParameterInfo param in methodInfo.Parameters)
+ if (!IsSupported (param)) return false;
+ return true;
+ }
+
+ public static bool IsSupported (ParameterInfo paramInfo)
+ {
+ Type type = paramInfo.ParameterType;
+ if (type.IsByRef || paramInfo.IsOut) return false;
+ if (type.IsArray) return IsSupportedPrimitive (type.GetElementType());
+ else return IsSupportedPrimitive (type);
+ }
+
+ internal static bool IsSupportedPrimitive (Type type)
+ {
+ return ( type.IsPrimitive ||
+ type.IsEnum ||
+ type == typeof(string) ||
+ type == typeof(DateTime) ||
+ type == typeof(Decimal)
+ );
+ }
+
+ protected object[] Read (NameValueCollection collection)
+ {
+ object[] res = new object [parameters.Length];
+ for (int n=0; n<res.Length; n++)
+ {
+ ParameterInfo pi = parameters [n];
+
+ if (pi.ParameterType.IsArray) {
+ string[] values = collection.GetValues (pi.Name);
+ if (values == null)
+ throw new InvalidOperationException ("Missing parameter: " + pi.Name);
+ Type elemType = pi.ParameterType.GetElementType ();
+ Array a = Array.CreateInstance (elemType, values.Length);
+ for (int i = 0; i < values.Length; i++) {
+ try {
+ a.SetValue (StringToObj (elemType, values [i]), i);
+ } catch (Exception ex) {
+ string error = "Cannot convert '" + values [i] + "' to " + elemType + "\n";
+ error += "Parameter name: " + pi.Name + " --> " + ex.Message;
+ throw new InvalidOperationException (error);
+ }
+ }
+ res [n] = a;
+ } else {
+ string val = collection [pi.Name];
+ if (val == null)
+ throw new InvalidOperationException ("Missing parameter: " + pi.Name);
+ try
+ {
+ res [n] = StringToObj (pi.ParameterType, val);
+ }
+ catch (Exception ex)
+ {
+ string error = "Cannot convert '" + val + "' to " + pi.ParameterType + "\n";
+ error += "Parameter name: " + pi.Name + " --> " + ex.Message;
+ throw new InvalidOperationException (error);
+ }
+ }
+ }
+ return res;
+ }
+ #endregion // Methods
+ }
}