2010-06-23 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / System.Runtime.Serialization / System.Runtime.Serialization / XmlFormatterDeserializer.cs
index c6627922227a5ced4ae8953b60072acdb48805cd..4c6fdd903bea1a0131fde65297a6d35a5b4080a3 100644 (file)
@@ -196,9 +196,25 @@ namespace System.Runtime.Serialization
 
                        foreach (var ass in AppDomain.CurrentDomain.GetAssemblies ()) {
                                foreach (var t in ass.GetTypes ()) {
-                                       var dca = t.GetCustomAttribute<DataContractAttribute> (true);
-                                       if (dca != null && dca.Name == name && dca.Namespace == ns)
-                                               return makeArray ? t.MakeArrayType () : t;
+                                       // there can be null entries or exception throw to access the attribute - 
+                                       // at least when some referenced assemblies could not be loaded (affects moonlight)
+                                       if (t == null)
+                                               continue;
+
+                                       try {
+                                               var dca = t.GetCustomAttribute<DataContractAttribute> (true);
+                                               if (dca != null && dca.Name == name && dca.Namespace == ns)
+                                                       return makeArray ? t.MakeArrayType () : t;
+                                       }
+                                       catch (TypeLoadException tle) {
+                                               Console.Error.WriteLine (tle);
+                                               continue;
+                                       }
+                                       catch (FileNotFoundException fnfe) {
+                                               Console.Error.WriteLine (fnfe);
+                                               continue;
+                                       }
+
                                        if (clrns != null && t.Name == name && t.Namespace == clrns)
                                                return makeArray ? t.MakeArrayType () : t;
                                }