示例#1
0
        static public string Dissolve(object data)
        {
            string returnData = null;

            if (data is String)
            {
                returnData = (string)data;
            }
            else if ((data is SByte) ||
                     (data is Int16) ||
                     (data is Int32) ||
                     (data is Int64) ||
                     (data is Byte) ||
                     (data is UInt16) ||
                     (data is UInt32) ||
                     (data is UInt64) ||
                     (data is Decimal) ||
                     (data is Char) ||
                     (data is Guid) ||
                     (data is Single) ||
                     (data is Double) ||
                     (data is Boolean))
            {
                returnData = data.ToString();
            }
            else if (data is DateTime)
            {
                DateTime date = (DateTime)data;

                returnData = date.ToUniversalTime().ToString();
            }
            else if (data is TimeSpan)
            {
                TimeSpan timespan = (TimeSpan)data;

                returnData = timespan.ToString();
            }
            else
            {
                LoadCustomSerializers();
                ITypeSerializer cts = _serializers[data.GetType()] as ITypeSerializer;
                if (cts != null)
                {
                    returnData = cts.Dissolve(data);
                }
                else
                {
                    bool found = false;
                    foreach (ITypeSerializer ts in _serializers.Values)
                    {
                        if (ts.DataType.IsInstanceOfType(data))
                        {
                            returnData = ts.Dissolve(data);
                            found      = true;
                        }
                    }

                    if (!found)
                    {
                        throw new Exception("Unserializable type: " + data.GetType().FullName);
                    }
                }
            }

            return(returnData);
        }