2010-07-23 Veerapuram Varadhan <v.varadhan@gmail.com>
[mono.git] / mcs / class / System.Data / System.Data / DataSet.cs
index 81b28f7e8d74362b3ac332dc30a767de0e55a89a..b62aff1e4d7847ae0836161b9f48aadd6d63d6ca 100644 (file)
@@ -95,6 +95,17 @@ namespace System.Data
                protected DataSet (SerializationInfo info, StreamingContext context)\r
                        : this ()\r
                {\r
+#if NET_2_0\r
+                       if (IsBinarySerialized (info, context)) {\r
+                               BinaryDeserialize (info);\r
+                               return;\r
+                       }\r
+#endif\r
+                       string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+                       XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
+                       ReadXmlSchema (reader);\r
+                       reader.Close ();\r
+\r
                        GetSerializationData (info, context);\r
                }\r
 \r
@@ -1132,6 +1143,7 @@ namespace System.Data
                {\r
 #if NET_2_0\r
                        if (RemotingFormat == SerializationFormat.Xml) {\r
+                               info.AddValue ("SchemaSerializationMode.DataSet", this.SchemaSerializationMode);\r
 #endif\r
                                StringWriter sw = new StringWriter ();\r
                                XmlTextWriter writer = new XmlTextWriter (sw);\r
@@ -1155,19 +1167,8 @@ namespace System.Data
                #region Protected Methods\r
                protected void GetSerializationData (SerializationInfo info, StreamingContext context)\r
                {\r
-#if NET_2_0\r
-                       if (IsBinarySerialized (info, context)) {\r
-                               BinaryDeserialize (info);\r
-                               return;\r
-                       }\r
-#endif\r
-                       string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+                       string s = info.GetValue ("XmlDiffGram", typeof (String)) as String;\r
                        XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
-                       ReadXmlSchema (reader);\r
-                       reader.Close ();\r
-\r
-                       s = info.GetValue ("XmlDiffGram", typeof (String)) as String;\r
-                       reader = new XmlTextReader (new StringReader (s));\r
                        ReadXml (reader, XmlReadMode.DiffGram);\r
                        reader.Close ();\r
                }\r
@@ -1401,8 +1402,12 @@ namespace System.Data
 \r
                        //TODO check if I can get away with write element string\r
                        WriteStartElement (writer, mode, colnspc, col.Prefix, XmlHelper.Encode (col.ColumnName));       \r
-                       if (typeof (IXmlSerializable).IsAssignableFrom (col.DataType)) {\r
-                               ((IXmlSerializable)rowObject).WriteXml (writer);\r
+                       if (typeof (IXmlSerializable).IsAssignableFrom (col.DataType) \r
+                           || col.DataType == typeof (object)) {\r
+                               IXmlSerializable serializableObj = rowObject as IXmlSerializable;\r
+                               if (serializableObj == null)\r
+                                       throw new InvalidOperationException ();\r
+                               ((IXmlSerializable)rowObject).WriteXml (writer);                                \r
                        } else {\r
                                writer.WriteString (WriteObjectXml (rowObject));\r
                        }\r
@@ -1547,10 +1552,26 @@ namespace System.Data
                private bool dataSetInitialized = true;\r
                public event EventHandler Initialized;\r
 \r
-               [MonoTODO]\r
                protected DataSet (SerializationInfo info, StreamingContext context, bool constructSchema)\r
-                       : this (info, context)\r
+                       : this ()\r
                {\r
+                       if (DetermineSchemaSerializationMode (info, context) == SchemaSerializationMode.ExcludeSchema) {\r
+                               InitializeDerivedDataSet ();\r
+                       }\r
+                       \r
+                       if (IsBinarySerialized (info, context)) {\r
+                               BinaryDeserialize (info);\r
+                               return;\r
+                       }\r
+                       \r
+                       if (constructSchema) {\r
+                               string s = info.GetValue ("XmlSchema", typeof (String)) as String;\r
+                               XmlTextReader reader = new XmlTextReader (new StringReader (s));\r
+                               ReadXmlSchema (reader);\r
+                               reader.Close ();\r
+                               \r
+                               GetSerializationData (info, context);\r
+                       }\r
                }\r
 \r
                SerializationFormat remotingFormat = SerializationFormat.Xml;\r
@@ -1751,10 +1772,8 @@ namespace System.Data
                        OnDataSetInitialized (e);\r
                }\r
 \r
-               [MonoTODO]\r
                protected virtual void InitializeDerivedDataSet ()\r
                {\r
-                       throw new NotImplementedException ();\r
                }\r
 \r
                protected SchemaSerializationMode DetermineSchemaSerializationMode (XmlReader reader)\r
@@ -1764,6 +1783,13 @@ namespace System.Data
 \r
                protected SchemaSerializationMode DetermineSchemaSerializationMode (SerializationInfo info, StreamingContext context)\r
                {\r
+                       SerializationInfoEnumerator e = info.GetEnumerator ();\r
+                       while (e.MoveNext ()) {\r
+                               if (e.Name == "SchemaSerializationMode.DataSet") {\r
+                                       return (SchemaSerializationMode) e.Value;\r
+                               }\r
+                       }\r
+                       \r
                        return SchemaSerializationMode.IncludeSchema;\r
                }\r
 \r