2010-03-30 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / corlib / System.Runtime.Serialization / FormatterServices.cs
index d63b191fb92ea726686a167e2925c140272cd3d6..75390deb112bc7f505b5cda7626dbd2b085d3193 100644 (file)
@@ -34,9 +34,11 @@ using System.Collections;
 using System.Reflection;
 using System.Runtime.CompilerServices;
 using System.Runtime.Serialization.Formatters;
+using System.Globalization;
 
 namespace System.Runtime.Serialization
 {
+       [System.Runtime.InteropServices.ComVisibleAttribute (true)]
        public sealed class FormatterServices
        {
                private const BindingFlags fieldFlags = BindingFlags.Public |
@@ -97,7 +99,7 @@ namespace System.Runtime.Serialization
                                        throw new SerializationException (msg);
                                }
 
-                               GetFields (t, fields);
+                               GetFields (type, t, fields);
                                t = t.BaseType;
                        }
 
@@ -106,12 +108,19 @@ namespace System.Runtime.Serialization
                        return result;
                }
 
-               private static void GetFields (Type type, ArrayList fields)
+               private static void GetFields (Type reflectedType, Type type, ArrayList fields)
                {
                        FieldInfo [] fs = type.GetFields (fieldFlags);
                        foreach (FieldInfo field in fs)
-                               if (!(field.IsNotSerialized))
-                                       fields.Add (field);
+                               if (!(field.IsNotSerialized)) {
+                                       MonoField mf = field as MonoField;
+                                       if (mf != null && reflectedType != type && !mf.IsPublic) {
+                                               string fname = type.Name + "+" + mf.Name;
+                                               fields.Add (mf.Clone (fname));
+                                       }
+                                       else
+                                               fields.Add (field);
+                               }
                }
 
                public static Type GetTypeFromAssembly (Assembly assem, string name)