* ObjectReader.cs: Field names can include the type name if the field belongs to...
[mono.git] / mcs / class / corlib / System.Runtime.Serialization.Formatters.Binary / ObjectWriter.cs
index 89886bb6967cd56f72c6e18049226425dcb0167d..5b9067ce1ca103225d366729308b50b52f3d4bba 100644 (file)
@@ -27,6 +27,7 @@ namespace System.Runtime.Serialization.Formatters.Binary
 \r
                ISurrogateSelector _surrogateSelector;\r
                StreamingContext _context;\r
+               FormatterAssemblyStyle _assemblyFormat;\r
 \r
                class TypeMetadata\r
                {\r
@@ -54,10 +55,11 @@ namespace System.Runtime.Serialization.Formatters.Binary
                        }\r
                }\r
 \r
-               public ObjectWriter(ISurrogateSelector surrogateSelector, StreamingContext context)\r
+               public ObjectWriter (ISurrogateSelector surrogateSelector, StreamingContext context, FormatterAssemblyStyle assemblyFormat)\r
                {\r
                        _surrogateSelector = surrogateSelector;\r
                        _context = context;\r
+                       _assemblyFormat = assemblyFormat;\r
                }\r
 \r
                public void WriteObjectGraph (BinaryWriter writer, object obj, Header[] headers)\r
@@ -93,10 +95,10 @@ namespace System.Runtime.Serialization.Formatters.Binary
                        if (isValueObject) id = _idGenerator.NextId;\r
                        else id = _idGenerator.GetId (obj, out firstTime);\r
 \r
-                       if (obj.GetType() == typeof(string)) {\r
+                       if (obj is string) {\r
                                WriteString (writer, id, (string)obj);\r
                        }\r
-                       else if (obj.GetType().IsArray) {\r
+                       else if (obj is Array) {\r
                                WriteArray (writer, id, (Array)obj);\r
                        }\r
                        else\r
@@ -504,7 +506,7 @@ namespace System.Runtime.Serialization.Formatters.Binary
                                // Value types are written embedded in the containing object\r
                                WriteObjectInstance (writer, val, true);\r
                        }\r
-                       else if (val.GetType() == typeof(string))\r
+                       else if (val is string)\r
                        {\r
                                // Strings are written embedded, unless already registered\r
                                bool firstTime;\r
@@ -537,7 +539,10 @@ namespace System.Runtime.Serialization.Formatters.Binary
                {\r
                        writer.Write ((byte) BinaryElement.Assembly);\r
                        writer.Write (id);\r
-                       writer.Write (assembly.GetName ().FullName);\r
+                       if (_assemblyFormat == FormatterAssemblyStyle.Full)\r
+                               writer.Write (assembly.GetName ().FullName);\r
+                       else\r
+                               writer.Write (assembly.GetName ().Name);\r
                }\r
 \r
                private int GetAssemblyId (Assembly assembly)\r
@@ -562,7 +567,9 @@ namespace System.Runtime.Serialization.Formatters.Binary
 \r
                public static void WritePrimitiveValue (BinaryWriter writer, object value)\r
                {\r
-                       switch (Type.GetTypeCode (value.GetType()))\r
+                       Type type = value.GetType();\r
+\r
+                       switch (Type.GetTypeCode (type))\r
                        {\r
                                case TypeCode.Boolean:\r
                                        writer.Write ((bool)value);\r
@@ -625,7 +632,11 @@ namespace System.Runtime.Serialization.Formatters.Binary
                                        break;\r
 \r
                                default:\r
-                                       throw new NotSupportedException ("Unsupported primitive type: " + value.GetType().FullName);\r
+                                       if (type == typeof (TimeSpan))\r
+                                               writer.Write (((TimeSpan)value).Ticks);\r
+                                       else\r
+                                               throw new NotSupportedException ("Unsupported primitive type: " + value.GetType().FullName);\r
+                                       break;\r
                        }\r
                }\r
 \r