示例#1
0
        private void SerializeValue(object obj)
        {
            if (obj == null)
            {
                m_builder.Append("undefined");
                return;
            }
            System.Type type = obj.GetType();

            if (type.IsArray)
            {
                SerializeArray(obj);
            }
            else if (Deserializer.IsGenericList(type))
            { //(type == typeof(List<Object>)) {
                Type elementType = type.GetGenericArguments()[0];
                System.Reflection.MethodInfo castMethod    = typeof(System.Linq.Enumerable).GetMethod("Cast").MakeGenericMethod(new System.Type[] { elementType });
                System.Reflection.MethodInfo toArrayMethod = typeof(System.Linq.Enumerable).GetMethod("ToArray").MakeGenericMethod(new System.Type[] { elementType });
                var castedObjectEnum = castMethod.Invoke(null, new object[] { obj });
                var castedObject     = toArrayMethod.Invoke(null, new object[] { castedObjectEnum });
                //            object[] oArray = ((List<object>)obj).ToArray();
                //            SerializeArray(oArray);
                SerializeArray(castedObject);
            }
            else if (type.IsEnum)
            {
                SerializeString(obj.ToString());
            }
            else if (type == typeof(string))
            {
                SerializeString(obj as string);
            }
            else if (type == typeof(Char))
            {
                SerializeString(obj.ToString());
            }
            else if (type == typeof(bool))
            {
                m_builder.Append((bool)obj ? "true" : "false");
            }
            else if (type == typeof(Boolean))
            {
                m_builder.Append((Boolean)obj ? "true" : "false");
                //        } else if (type.IsPrimitive) {
                //            m_builder.Append(System.ComponentModel.TypeDescriptor.GetConverter(type).ConvertToInvariantString(obj));

                m_builder.Append(Convert.ChangeType(obj, typeof(string)));
            }
            else if (type == typeof(int))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(Byte))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(SByte))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(Int16))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(UInt16))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(Int32))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(UInt32))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(Int64))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(UInt64))
            {
                m_builder.Append(obj);
            }
            else if (type == typeof(Single))
            {
                m_builder.Append(((Single)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture));
            }
            else if (type == typeof(Double))
            {
                m_builder.Append(((Double)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture));
            }
            else if (type == typeof(float))
            {
                m_builder.Append(((float)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture));
            }
            else if (type == typeof(double))
            {
                m_builder.Append(((double)obj).ToString("R", System.Globalization.CultureInfo.InvariantCulture));
            }
            else if (type.IsValueType)
            {
                SerializeObject(obj);
            }
            else if (type.IsClass)
            {
                SerializeObject(obj);
            }
            else
            {
                throw new System.InvalidOperationException("unsupport type: " + type.Name);
            }
        }
示例#2
0
 private object ConvertToType(object value, System.Type type, Dictionary <string, object> src)
 {
     if (type.IsArray)
     {
         return(ConvertToArray(value, type, src));
     }
     else if (Deserializer.IsGenericList(type))
     {
         return(ConvertToList(value, type, src));
     }
     else if (Deserializer.IsGenericDictionary(type))
     {
         return(ConvertToDictionary(value, type, src));
         //        } else if (type == typeof(List<object>)) {
         //            object[] oArray = ((List<object>)value).ToArray();
         //            return ConvertToArray(oArray, type, src);
         //        } else if (type.IsPrimitive) {
         //           return System.ComponentModel.TypeDescriptor.GetConverter(type).ConvertFromInvariantString(value.ToString ());
     }
     else if (type.IsEnum)
     {
         return(System.Enum.Parse(type, Convert.ToString(value)));
     }
     else if (type == typeof(string))
     {
         return(Convert.ToString(value));
     }
     else if (type == typeof(Byte))
     {
         return(Convert.ToByte(value));
     }
     else if (type == typeof(SByte))
     {
         return(Convert.ToSByte(value));
     }
     else if (type == typeof(Int16))
     {
         return(Convert.ToInt16(value));
     }
     else if (type == typeof(UInt16))
     {
         return(Convert.ToUInt16(value));
     }
     else if (type == typeof(Int32))
     {
         return(Convert.ToInt32(value));
     }
     else if (type == typeof(UInt32))
     {
         return(Convert.ToUInt32(value));
     }
     else if (type == typeof(Int64))
     {
         return(Convert.ToInt64(value));
     }
     else if (type == typeof(UInt64))
     {
         return(Convert.ToUInt64(value));
     }
     else if (type == typeof(Char))
     {
         return(Convert.ToChar(value));
     }
     else if (type == typeof(Double))
     {
         return(Convert.ToDouble(value));
     }
     else if (type == typeof(Single))
     {
         return(Convert.ToSingle(value));
     }
     else if (type == typeof(int))
     {
         return(Convert.ToInt32(value));
     }
     else if (type == typeof(float))
     {
         return(Convert.ToSingle(value));
     }
     else if (type == typeof(double))
     {
         return(Convert.ToDouble(value));
     }
     else if (type == typeof(bool))
     {
         return(Convert.ToBoolean(value));
     }
     else if (type == typeof(Boolean))
     {
         return(Convert.ToBoolean(value));
     }
     else if (type.IsValueType)
     {
         return(DeserializeO(type, (Dictionary <string, object>)value, src));
     }
     else if (type == typeof(System.Object))
     {
         return(value);
     }
     else if (type.IsClass)
     {
         return(DeserializeO(type, (Dictionary <string, object>)value, src));
     }
     else
     {
         // Should we throw here?
     }
     return(value);
 }