* TypeData.cs, TypeTranslator.cs: Implemented some methods.
[mono.git] / mcs / class / System.XML / System.Xml.Serialization / XmlCustomFormatter.cs
index 1850b2b1181ea255a413d34558649e07b3459a49..85796921f37b18f527b5650f648933b9226427fa 100644 (file)
@@ -3,6 +3,7 @@
 //
 // Author:
 //   Tim Coleman (tim@timcoleman.com)
+//   Lluis Sanchez Gual (lluis@ximian.com)\r
 //
 // Copyright (C) Tim Coleman, 2002
 //
@@ -115,18 +116,18 @@ namespace System.Xml.Serialization {
                internal static long ToEnum (string value, Hashtable values, string typeName, bool validate)
                {
                        // Assuming that h contains map from value to Enumerated Name
-/*\r
+/*
                        You can try : 
-                               return ToEnum ("Element", h, "XmlNodeType");\r
-                       where:\r
-                               (1) no keys and values for h.\r
-                               (2) string keys and Enum, Type, long, string value.\r
-*/\r
-                       string memberName = (string) values [value];\r
-                       if (memberName == null)\r
-                               throw new InvalidOperationException (String.Format ("{0} is not a valid member of type {1}", value, typeName));\r
-\r
-                       return (long) Enum.Parse (Type.GetType (typeName), memberName);\r
+                               return ToEnum ("Element", h, "XmlNodeType");
+                       where:
+                               (1) no keys and values for h.
+                               (2) string keys and Enum, Type, long, string value.
+*/
+                       string memberName = (string) values [value];
+                       if (memberName == null)
+                               throw new InvalidOperationException (String.Format ("{0} is not a valid member of type {1}", value, typeName));
+
+                       return (long) Enum.Parse (Type.GetType (typeName), memberName);
                }
 
                internal static string ToXmlName (string value)
@@ -149,6 +150,59 @@ namespace System.Xml.Serialization {
                        return ToXmlName (value);
                }
 
+               internal static string ToXmlString (object value)
+               {
+                       if (value == null) return null;
+                       switch (Type.GetTypeCode(value.GetType()))
+                       {
+                               case TypeCode.Boolean: return XmlConvert.ToString ((bool)value);
+                               case TypeCode.Byte: return XmlConvert.ToString ((byte)value);
+                               case TypeCode.Char: return XmlConvert.ToString ((char)value);
+                               case TypeCode.DateTime: return XmlConvert.ToString ((DateTime)value);
+                               case TypeCode.Decimal: return XmlConvert.ToString ((decimal)value);
+                               case TypeCode.Double: return XmlConvert.ToString ((double)value);
+                               case TypeCode.Int16: return XmlConvert.ToString ((Int16)value);
+                               case TypeCode.Int32: return XmlConvert.ToString ((Int32)value);
+                               case TypeCode.Int64: return XmlConvert.ToString ((Int64)value);
+                               case TypeCode.SByte: return XmlConvert.ToString ((sbyte)value);
+                               case TypeCode.Single: return XmlConvert.ToString ((Single)value);
+                               case TypeCode.UInt16: return XmlConvert.ToString ((UInt16)value);
+                               case TypeCode.UInt32: return XmlConvert.ToString ((UInt32)value);
+                               case TypeCode.UInt64: return XmlConvert.ToString ((UInt64)value);
+                       }
+
+                       if (value.GetType() == typeof(TimeSpan)) return XmlConvert.ToString ((TimeSpan)value);
+                       if (value.GetType() == typeof (Guid)) return XmlConvert.ToString ((Guid)value);
+
+                       return value.ToString ();
+               }
+
+               internal static object FromXmlString (string typeName, string value)
+               {
+                       if (value == null) return null;
+
+                       switch (typeName)
+                       {
+                               case "System.Boolean": return XmlConvert.ToBoolean (value);
+                               case "System.Byte": return XmlConvert.ToByte (value);
+                               case "System.Char": return XmlConvert.ToChar (value);
+                               case "System.DateTime": return XmlConvert.ToDateTime (value);
+                               case "System.Decimal": return XmlConvert.ToDecimal (value);
+                               case "System.Double": return XmlConvert.ToDouble (value);
+                               case "System.Int16": return XmlConvert.ToInt16 (value);
+                               case "System.Int32": return XmlConvert.ToInt32 (value);
+                               case "System.Int64": return XmlConvert.ToInt64 (value);
+                               case "System.SByte": return XmlConvert.ToSByte (value);
+                               case "System.Single": return XmlConvert.ToSingle (value);
+                               case "System.UInt16": return XmlConvert.ToUInt16 (value);
+                               case "System.UInt32": return XmlConvert.ToUInt32 (value);
+                               case "System.UInt64": return XmlConvert.ToUInt64 (value);
+                               case "System.TimeSpan": return XmlConvert.ToTimeSpan (value);
+                               case "System.Guid": return XmlConvert.ToGuid (value);
+                               default: return Convert.ChangeType (value, Type.GetType(typeName));
+                       }
+               }
+
                #endregion // Methods
        }
 }