2004-01-12 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 12 Jan 2005 13:53:23 +0000 (13:53 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 12 Jan 2005 13:53:23 +0000 (13:53 -0000)
* DataSet.cs : When serializing DataTable, BuildSchema() is passed
  null relation collections.
  Quick fix for XmlSerializer deserialization. It does not require
  XML Schema included.

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

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

index 3d2aa225b25e1c7326102fbee9b535cce96ac182..41e40cb2ad981976c788ae9ad6e47b4abc8b4974 100644 (file)
@@ -1,3 +1,10 @@
+2004-01-12  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * DataSet.cs : When serializing DataTable, BuildSchema() is passed
+         null relation collections.
+         Quick fix for XmlSerializer deserialization. It does not require
+         XML Schema included.
+
 2004-01-11  Atsushi Enomoto  <atsushi@ximian.com>
 
        * DataSet.cs,
index a79ad17fe74f83185f1ed213543a26b8596e6b10..990330b8f313e85f0d6bf8414ed07d2f52969d97 100644 (file)
@@ -1050,8 +1050,11 @@ namespace System.Data {
                        reader.MoveToContent ();
                        reader.ReadStartElement ();
                        reader.MoveToContent ();
-                       ReadXmlSchema (reader);
-                       reader.MoveToContent ();
+                       if (reader.LocalName == "schema" &&
+                               reader.NamespaceURI == XmlSchema.Namespace) {
+                               ReadXmlSchema (reader);
+                               reader.MoveToContent ();
+                       }
                        ReadXml (reader, XmlReadMode.DiffGram);
                        reader.MoveToContent ();
                        reader.ReadEndElement ();
@@ -1412,7 +1415,7 @@ namespace System.Data {
                                nsmgr.AddNamespace (XmlConstants.TnsPrefix, Namespace);
                                nsmgr.AddNamespace (String.Empty, Namespace);
                        }
-                       if (CheckExtendedPropertyExists ())
+                       if (CheckExtendedPropertyExists (tables, relations))
                                nsmgr.AddNamespace (XmlConstants.MspropPrefix, XmlConstants.MspropNamespace);
 
                        if (atts.Count > 0)
@@ -1422,7 +1425,7 @@ namespace System.Data {
                        elem.Name = XmlConvert.EncodeName (DataSetName);
 
                        // Add namespaces used in DataSet components (tables, columns, ...)
-                       foreach (DataTable dt in Tables) {
+                       foreach (DataTable dt in tables) {
                                foreach (DataColumn col in dt.Columns)
                                        CheckNamespace (col.Prefix, col.Namespace, nsmgr, schema);
                                CheckNamespace (dt.Prefix, dt.Namespace, nsmgr, schema);
@@ -1482,11 +1485,13 @@ namespace System.Data {
                        return schema;
                }
 
-               private bool CheckExtendedPropertyExists ()
+               private bool CheckExtendedPropertyExists (
+                       DataTableCollection tables,
+                       DataRelationCollection relations)
                {
                        if (ExtendedProperties.Count > 0)
                                return true;
-                       foreach (DataTable dt in Tables) {
+                       foreach (DataTable dt in tables) {
                                if (dt.ExtendedProperties.Count > 0)
                                        return true;
                                foreach (DataColumn col in dt.Columns)
@@ -1496,7 +1501,9 @@ namespace System.Data {
                                        if (c.ExtendedProperties.Count > 0)
                                                return true;
                        }
-                       foreach (DataRelation rel in Relations)
+                       if (relations == null)
+                               return false;
+                       foreach (DataRelation rel in relations)
                                if (rel.ExtendedProperties.Count > 0)
                                        return true;
                        return false;