/// <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; }