* SchemaTypes.cs: Changed DataSet type for a more generic XmlSerializable.
[mono.git] / mcs / class / System.Web / System.Web.UI / LosFormatter.cs
index 50424b205ac33a3f0a2da63b77824095ad41e23b..d06317cfd97e93e4d052ef9f2edad187092c00a4 100644 (file)
@@ -36,6 +36,7 @@ namespace System.Web.UI
                const char hashtableID = 'h';
                const char binaryID = 'b';
                const char arrayID = 'a';
+               const char dateTimeID = 'd';
                
                static Hashtable specialTypes;
                static Hashtable idToType;
@@ -50,6 +51,7 @@ namespace System.Web.UI
                        specialTypes.Add (typeof (ArrayList), new WriteObject (WriteArrayList));
                        specialTypes.Add (typeof (Hashtable), new WriteObject (WriteHashtable));
                        specialTypes.Add (typeof (Array), new WriteObject (WriteArray));
+                       specialTypes.Add (typeof (DateTime), new WriteObject (WriteDateTime));
 
                        idToType = new Hashtable ();
                        idToType.Add (typeof (string), stringID);
@@ -249,11 +251,14 @@ namespace System.Web.UI
                                }
                                break;
                        case binaryID:
-                               byte [] buffer = WebEncoding.Encoding.GetBytes (enclosed);
+                               byte [] buffer = Convert.FromBase64String (enclosed);
                                MemoryStream ms = new MemoryStream (buffer);
                                BinaryFormatter fmt = new BinaryFormatter ();
                                obj = fmt.Deserialize (ms);
                                break;
+                       case dateTimeID:
+                               obj = new DateTime (Int64.Parse (enclosed));
+                               break;
                        default:
                                throw new ArgumentException ("input");
                        }
@@ -390,6 +395,17 @@ namespace System.Web.UI
                        output.Write('>');
                }
 
+               private static void WriteDateTime (LosFormatter formatter, TextWriter output, object value)
+               {
+                       if (value == null)
+                               return;
+                       
+                       output.Write (dateTimeID);
+                       output.Write ('<');
+                       output.Write (((DateTime) value).Ticks);
+                       output.Write('>');
+               }
+
                private static string EscapeSpecialChars (string str)
                {
                        if (str.IndexOfAny (specialChars) == -1)
@@ -405,7 +421,6 @@ namespace System.Web.UI
                private void SerializeBinary (TextWriter output, object value)
                {
                        WebTrace.PushContext ("LosFormatter.SerializeBinary");
-                       WebTrace.WriteLine ("not serializing value type: " + value.GetType ());
                        /* This is just for debugging purposes */
                        /*if (value is Array) {
                                Array array = (Array) value;
@@ -418,7 +433,7 @@ namespace System.Web.UI
                                }
                        }
                        */
-                       /*
+                       
                        BinaryFormatter fmt = new BinaryFormatter ();
                        MemoryStream stream = new MemoryStream ();
 
@@ -426,9 +441,9 @@ namespace System.Web.UI
                        output.Write (binaryID);
                        output.Write ('<');
                        byte [] buffer = stream.GetBuffer ();
-                       output.Write (Convert.ToBase64String (stream.GetBuffer ()));
+                       output.Write (Convert.ToBase64String (buffer));
                        output.Write ('>');
-                       */
+                       
                        WebTrace.PopContext ();
                }