2006-11-22 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Wed, 22 Nov 2006 14:17:49 +0000 (14:17 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Wed, 22 Nov 2006 14:17:49 +0000 (14:17 -0000)
* XmlCustomFormatter.cs : handle hexBinary type. Fixed bug #79989
  and #79990.

* XmlSerializerTests.cs : added test for hexBinary.

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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs
mcs/class/System.XML/Test/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/Test/System.Xml.Serialization/XmlSerializerTests.cs

index c07f64543717788a0428fcd32c76a6e6e41832ae..aebd7d00759bd3ba9bb8fc0bf64e6b3751131a01 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-22  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlCustomFormatter.cs : handle hexBinary type. Fixed bug #79989
+         and #79990.
+
 2006-11-22  Atsushi Enomoto  <atsushi@ximian.com>
 
        Fixed bug #78611.
index 736783964c391714ff737d9b606b40a18390b673..950f5a2a56f18114192c918b7954c25a75df1239 100644 (file)
@@ -241,6 +241,7 @@ namespace System.Xml.Serialization {
                                case "guid": return XmlConvert.ToString ((Guid)value);
                                case "base64":
                                case "base64Binary": return value == null ? String.Empty : Convert.ToBase64String ((byte[])value);
+                               case "hexBinary": return value == null ? String.Empty : XmlConvert.ToBinHexString ((byte[]) value);
                                case "duration": return XmlConvert.ToString ((TimeSpan) value);
                        default: return value is IFormattable ? ((IFormattable) value).ToString (null, CultureInfo.InvariantCulture) : value.ToString ();
                        }
@@ -271,6 +272,7 @@ namespace System.Xml.Serialization {
                                case "guid": return XmlConvert.ToGuid (value);
                                case "base64":
                                case "base64Binary": return Convert.FromBase64String (value);
+                               case "hexBinary": return XmlConvert.FromBinHexString (value);
                                case "duration": return XmlConvert.ToTimeSpan (value);
                                default: 
                                        if (type.Type != null)
index 793d212540fad327b58e2593667c736fc83e4e10..0f4cc4e8533eb0309dfb6c256b426e8649c36beb 100644 (file)
@@ -1,3 +1,7 @@
+2006-11-22  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * XmlSerializerTests.cs : added test for hexBinary.
+
 2006-11-22  Atsushi Enomoto  <atsushi@ximian.com>
 
        * XmlReflectionImporterTests.cs : added test for class that contains
index b6f72a5c5dc48343b60e5c38eb82a88f7bdbd3d3..44fb8c52cf1f9942bbb6f2cd6f50c6cc398524b5 100644 (file)
@@ -2149,6 +2149,27 @@ namespace MonoTests.System.XmlSerialization
                }
 #endif
 
+               [Test] // bug #79989, #79990
+               public void SerializeHexBinary()
+               {
+                       XmlSerializer ser = new XmlSerializer (typeof (HexBinary));
+                       StringWriter sw = new StringWriter ();
+                       XmlTextWriter xtw = new XmlTextWriter (sw);
+                       ser.Serialize (xtw, new HexBinary ());
+                       xtw.Close ();
+                       string expected = @"<?xml version=""1.0"" encoding=""utf-16""?><HexBinary xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" Data=""010203"" />";
+                       Assert.AreEqual (expected, sw.ToString ());
+                       HexBinary h = (HexBinary) ser.Deserialize (new StringReader (sw.ToString ()));
+                       Assert.AreEqual (new byte [] {1, 2, 3}, h.Data);
+               }
+
+               [XmlRoot ("HexBinary")]
+               public class HexBinary
+               {
+                       [XmlAttribute (DataType = "hexBinary")]
+                       public byte [] Data = new byte [] {1, 2, 3};
+               }
+
                public class CDataTextNodesType
                {
                        public CDataTextNodesInternal foo;