Author: robertj
Date: 2007-08-23 02:22:53 -0400 (Thu, 23 Aug 2007)
New Revision: 84680

Modified:
   trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog
   
trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs
Log:
2007-08-21  Robert Jordan  <[EMAIL PROTECTED]>

        * ValueCollectionParameterReader.cs (Read):
        Add support for array parameters. Fixes #82519.



Modified: 
trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog
===================================================================
--- trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog 
2007-08-23 06:17:06 UTC (rev 84679)
+++ trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ChangeLog 
2007-08-23 06:22:53 UTC (rev 84680)
@@ -1,3 +1,8 @@
+2007-08-21  Robert Jordan  <[EMAIL PROTECTED]>
+
+       * ValueCollectionParameterReader.cs (Read):
+       Add support for array parameters. Fixes #82519.
+
 2007-07-29  Vladimir Krasnov  <[EMAIL PROTECTED]>
 
        * TypeStubManager.cs: fixed BindingInfo.ctor, reverted to ONLY_1_1

Modified: 
trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs
===================================================================
--- 
trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs
 2007-08-23 06:17:06 UTC (rev 84679)
+++ 
trunk/mcs/class/System.Web.Services/System.Web.Services.Protocols/ValueCollectionParameterReader.cs
 2007-08-23 06:22:53 UTC (rev 84680)
@@ -90,18 +90,39 @@
                        object[] res = new object [parameters.Length];
                        for (int n=0; n<res.Length; n++)
                        {
-                               string val = collection [parameters[n].Name];
-                               if (val == null) throw new 
InvalidOperationException ("Missing parameter: " + parameters[n].Name);
-                               try
-                               {
-                                       res [n] = StringToObj 
(parameters[n].ParameterType, val);
-                               }
-                               catch (Exception ex)
-                               {
-                                       string error = "Cannot convert '" + val 
+ "' to " + parameters[n].ParameterType.FullName + "\n";
-                                       error += "Parameter name: " + 
parameters[n].Name + " --> " + ex.Message;
-                                       throw new InvalidOperationException 
(error);
-                               }
+                               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;
                }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to