Ejemplo n.º 1
0
        /// <summary>
        /// 对序列化类型进行对应的序列化操作
        /// </summary>
        /// <param name="type">序列化对象类型</param>
        private void SwitchSerializationMethod(object obj)
        {
            if (obj == null)
            {
                _jsonStrBuilder.Append("null");
                return;
            }
            Type type = obj.GetType();

            //针对jsonobject类型的序列化
            IJsonObject jsonObject = obj as IJsonObject;

            if (jsonObject != null)
            {
                _jsonStrBuilder.Append(jsonObject.ToJsonString());
                return;
            }

            bool isValueType = type.IsValueType;

            if (!isValueType)
            {
                if (_objStack.Contains(obj))
                {
                    throw new Exception("循环引用");
                }
                _objStack.Push(obj);
            }
            ObjectType objectType = GetObjectType(type);

            switch (objectType)
            {
            case ObjectType.Boolean:  SerializeBoolean(obj); break;

            case ObjectType.Int32: SerializeInt32(obj); break;

            case ObjectType.Int64: SerializeInt64(obj); break;

            case ObjectType.UInt32: SerializeUInt32(obj); break;

            case ObjectType.UInt64: SerializeUInt64(obj); break;

            case ObjectType.Int16: SerializeInt16(obj); break;

            case ObjectType.UInt16: SerializeUInt16(obj); break;

            case ObjectType.Byte: SerializeByte(obj); break;

            case ObjectType.Char: SerializeChar(obj); break;

            case ObjectType.Float: SerializeFloat(obj); break;

            case ObjectType.Double: SerializeDouble(obj); break;

            case ObjectType.Decimal: SerializeDecimal(obj); break;

            case ObjectType.DateTime: SerializeDateTime(obj); break;

            case ObjectType.Enum: SerializeEnum(obj); break;

            case ObjectType.String: SerializeString(obj); break;

            case ObjectType.Dictionary: SerializeDictionary(obj); break;

            case ObjectType.List: SerializeEnumerable(obj); break;

            case ObjectType.Enumerable: SerializeEnumerable(obj); break;

            case ObjectType.Object: SerializeObject(obj); break;

            case ObjectType.Array: SerializeEnumerable(obj); break;

            default: throw new Exception("未知转换类型");
            }
            if (!isValueType)
            {
                _objStack.Pop();
            }
            return;
        }