2003-01-26 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
authorAtsushi Eno <atsushieno@gmail.com>
Sun, 26 Jan 2003 08:07:53 +0000 (08:07 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Sun, 26 Jan 2003 08:07:53 +0000 (08:07 -0000)
* XmlSerializer.cs : some fix handling xml node object more correct.

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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/XmlSerializer.cs

index 3b1d98de2dd864fdb7e78fc45a77645a36dd8681..394bc7fda0ef75d0914e3cdbb4028a83793d29cc 100755 (executable)
@@ -1,3 +1,7 @@
+2003-01-26  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
+
+       * XmlSerializer.cs : some fix handling xml node object more correct.
+
 2003-01-16  Ajay kumar Dwivedi <adwiv@yahoo.com>
        * XmlSerializer.cs: Array serialization for 1D arrays works
        * TypeTranslator: Added for translations`
index 3a5ba0fd1e64ee60ddaa27cedd3cbf3d634ed526..252a1c7f2f3adda8618ad7526316f44b5c061317 100644 (file)
@@ -328,10 +328,22 @@ namespace System.Xml.Serialization {
 
                private void SerializeBuiltIn (XmlWriter writer, object o)
                {
-                       TypeData td = TypeTranslator.GetTypeData (o.GetType ());
-                       writer.WriteStartElement  (td.ElementName);
-                       WriteBuiltinValue(writer,o);
-                       writer.WriteEndElement();
+                       if (o is XmlNode) {
+                               XmlNode n = (XmlNode) o;
+                               XmlNodeReader nrdr = new XmlNodeReader (n);
+                               nrdr.Read ();
+                               if (nrdr.NodeType == XmlNodeType.XmlDeclaration)
+                                       nrdr.Read ();
+                               do {
+                                       writer.WriteNode (nrdr, false);
+                               } while (nrdr.Read ());
+                       }
+                       else {
+                               TypeData td = TypeTranslator.GetTypeData (o.GetType ());
+                               writer.WriteStartElement  (td.ElementName);
+                               WriteBuiltinValue(writer,o);
+                               writer.WriteEndElement();
+                       }
                }
 
                private void WriteNilAttribute(XmlWriter writer)
@@ -629,6 +641,9 @@ namespace System.Xml.Serialization {
                                        FillICollectionType (type);
                                        return;
                                }
+//                             if (type.GetInterface ("IDictionary") == typeof (System.Collections.IDictionary)) {
+//                                     throw new Exception ("Can't Serialize Type " + type.Name + " since it implements IDictionary");
+//                             }
                                if (type.GetInterface ("IEnumerable") == typeof (System.Collections.IEnumerable)) {
                                        //FillIEnumerableType(type);
                                        //return;
@@ -842,7 +857,7 @@ namespace System.Xml.Serialization {
                                return false;
                        if (type.IsValueType || type == typeof (string) || type.IsPrimitive)
                                return true;
-                       if (type == typeof (DateTime) || type == typeof (XmlNode))
+                       if (type == typeof (DateTime) || type == typeof (XmlNode) || type.IsSubclassOf (typeof (XmlNode)))
                                return true;
                                
                        return false;