2009-09-26 Veerapuram Varadhan <vvaradhan@novell.com>
authorVeerapuram Varadhan <v.varadhan@gmail.com>
Sat, 26 Sep 2009 08:08:22 +0000 (08:08 -0000)
committerVeerapuram Varadhan <v.varadhan@gmail.com>
Sat, 26 Sep 2009 08:08:22 +0000 (08:08 -0000)
** Fixes part of #427769 - Patch by John Lenz <jlenz2@math.uiuc.edu>
* DataSet.cs: XML serialization improvements to be compatible with MS impl.

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

mcs/class/System.Data/System.Data/ChangeLog
mcs/class/System.Data/System.Data/DataSet.cs
mcs/class/System.Data/Test/System.Data/ChangeLog
mcs/class/System.Data/Test/System.Data/DataSetTypedDataSetTest.cs

index 87228ec42dcf9bf3c7c47c4a2207c707ddb599ef..326838851027fc92b22930df95c9ba3d8b192596 100644 (file)
@@ -1,3 +1,8 @@
+2009-09-26  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       ** Fixes part of #427769 - Patch by John Lenz <jlenz2@math.uiuc.edu>
+       * DataSet.cs: XML serialization improvements to be compatible with MS impl.
+       
 2009-09-15  Veerapuram Varadhan  <vvaradhan@novell.com>
        
        ** Fixes #536194 - Patch by Andrew Kurochk <aaki.viper@gmail.com>
index 81b28f7e8d74362b3ac332dc30a767de0e55a89a..cb447a2c41cd4b56d756bb78fe2b4aee99d3e2a4 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
@@ -1547,10 +1548,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 +1768,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 +1779,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
index 56c256e71294299e93129e78bb36f1e0fd7c6563..d96346d1d9b16bf4e7065e75362f94af420f8858 100644 (file)
@@ -1,6 +1,11 @@
+2009-09-26  Veerapuram Varadhan  <vvaradhan@novell.com>
+
+       * DataSetTypedDataSet.cs: Test for #427769.  Patch by 
+       John Lenz <jlenz2@math.uiuc.edu>.
+       
 2009-09-24  Veerapuram Varadhan  <vvaradhan@novell.com>
 
-       * DataSetTest2.cs (MergeTest_SameDataSet_536194): Added new.
+        * DataSetTest2.cs (MergeTest_SameDataSet_536194): Added new.
        
 2009-01-16  Atsushi Enomoto  <atsushi@ximian.com>
 
index b10faba30344e3f36ae670e237d4791454906082..72cbc19e776410f17beb145fc3f687549cd029ef 100644 (file)
@@ -196,6 +196,58 @@ namespace MonoTests.System.Data
                        myTypedDataSet.Order_DetailsRow[] drArr1 = ds.Orders[0].GetOrder_DetailsRows();
                        DataRow[] drArr2 = ds.Orders[0].GetChildRows(ds.Relations[0]);
                        Assert.AreEqual(drArr1 ,drArr2,"TDS25");
+
+#if NET_2_0
+                       //now test serialization of a typed dataset generated by microsoft's xsd.exe
+                       DataSet1 ds1 = new DataSet1();
+                       ds1.DataTable1.AddDataTable1Row("test");
+                       ds1.DataTable1.AddDataTable1Row("test2");
+
+                       global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter =
+                         new global::System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
+                       MemoryStream stream = new MemoryStream();
+
+                       formatter.Serialize(stream, ds1);
+
+                       stream.Seek(0, SeekOrigin.Begin);
+
+                       DataSet1 ds1load = (DataSet1) formatter.Deserialize(stream);
+
+                       Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
+                       Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
+                       Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
+                       Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
+                       if (ds1load.DataTable1[0].Column1 == "test") {
+                               Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
+                       } else if (ds1load.DataTable1[0].Column1 == "test2") {
+                               Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
+                       } else {
+                               Assert.Fail("Invalid entry for Column1");
+                       }
+
+                       //now test when the mode is exclude schema
+                       ds1.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.ExcludeSchema;
+
+                       stream = new MemoryStream();
+
+                       formatter.Serialize(stream, ds1);
+
+                       stream.Seek(0, SeekOrigin.Begin);
+
+                       ds1load = (DataSet1) formatter.Deserialize(stream);
+
+                       Assert.IsTrue(ds1load.Tables.Contains("DataTable1"));
+                       Assert.AreEqual("DataTable1DataTable", ds1load.Tables["DataTable1"].GetType().Name);
+                       Assert.AreEqual(2, ds1load.DataTable1.Rows.Count);
+                       Assert.AreEqual("DataTable1Row", ds1load.DataTable1[0].GetType().Name);
+                       if (ds1load.DataTable1[0].Column1 == "test") {
+                               Assert.AreEqual("test2", ds1load.DataTable1[1].Column1);
+                       } else if (ds1load.DataTable1[0].Column1 == "test2") {
+                               Assert.AreEqual("test", ds1load.DataTable1[1].Column1);
+                       } else {
+                               Assert.Fail("Invalid entry for Column1");
+                       }
+#endif
                }
        
                protected void T_Changing(object sender, myTypedDataSet.OrdersRowChangeEvent e)