* BinaryCommon.cs: Added CheckSerializable method.
authorLluis Sanchez <lluis@novell.com>
Fri, 2 Jul 2004 15:25:27 +0000 (15:25 -0000)
committerLluis Sanchez <lluis@novell.com>
Fri, 2 Jul 2004 15:25:27 +0000 (15:25 -0000)
* ObjectWriter.cs: Check for type serializability even for members with
  null values.

svn path=/trunk/mcs/; revision=30684

mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryCommon.cs
mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ChangeLog
mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectWriter.cs

index 53f96a06eff807ac3edb4cfd664195a82c6cdf08..19be6da75e22265afb67e33de199ef4d85f55a49 100644 (file)
@@ -107,6 +107,17 @@ namespace System.Runtime.Serialization.Formatters.Binary
                {\r
                        return _typeCodesToType [code];\r
                }\r
+               \r
+               public static void CheckSerializable (Type type, ISurrogateSelector selector, StreamingContext context)\r
+               {\r
+                       if (!type.IsSerializable && !type.IsInterface) \r
+                       {\r
+                               if (selector != null && selector.GetSurrogate (type, context, out selector) != null)\r
+                                       return;\r
+\r
+                               throw new SerializationException ("Type " + type + " is not marked as Serializable.");\r
+                       }\r
+               }\r
        }\r
 \r
        internal enum BinaryElement : byte\r
index 50ea5dc89e7e1ac002dd6be7f7fe15368dcb0b25..33ba6b492a74b9c35739587bf9b81e3c566b8f62 100755 (executable)
@@ -1,3 +1,9 @@
+2004-07-02  Lluis Sanchez Gual  <lluis@ximian.com>
+
+       * BinaryCommon.cs: Added CheckSerializable method.
+       * ObjectWriter.cs: Check for type serializability even for members with
+         null values.
+       
 2004-05-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * ObjectWriter.cs: reduce contention in GetObjectData.
index 11f382914cc9a9b64365dce8e9c363e6210f92d9..b21a617bb341c0dcd41457df68ac35331eb246be 100644 (file)
@@ -357,10 +357,7 @@ namespace System.Runtime.Serialization.Formatters.Binary
 \r
                        // Check if the object is marked with the Serializable attribute\r
 \r
-                       if (!instanceType.IsSerializable)\r
-                               throw new SerializationException ("Type " + instanceType +\r
-                                                                 " is not marked as Serializable " + \r
-                                                                 "and does not implement ISerializable.");\r
+                       BinaryCommon.CheckSerializable (instanceType, _surrogateSelector, _context);\r
 \r
                        ISerializable ser = obj as ISerializable;\r
 \r
@@ -653,6 +650,7 @@ namespace System.Runtime.Serialization.Formatters.Binary
                {\r
                        if (val == null) \r
                        {\r
+                               BinaryCommon.CheckSerializable (valueType, _surrogateSelector, _context);\r
                                writer.Write ((byte) BinaryElement.NullValue);\r
                        }\r
                        else if (BinaryCommon.IsPrimitive(val.GetType()))\r