public CExceptionDeserializer(Type type) : base(type) { List <MemberInfo> fieldList = CExceptionSerializer.GetSerializableFields(); foreach (MemberInfo fieldInfo in fieldList) { if (m_deserFields.ContainsKey(fieldInfo.Name)) { m_deserFields[fieldInfo.Name] = fieldInfo; } else { m_deserFields.Add(fieldInfo.Name, fieldInfo); } } m_type = type; }
/// <summary> /// Gets the serializer-Instance according to given type /// </summary> /// <param name="type">Type of the objects, that have to be serialized</param> /// <returns>Serializer - Instance</returns> public AbstractSerializer GetSerializer(Type type) { AbstractSerializer abstractSerializer = (AbstractSerializer)m_htSerializerMap[type]; if (abstractSerializer == null) { // TODO: Serialisieren von Nullbaren Typen und generischen // Listen if (typeof(IDictionary).IsAssignableFrom(type)) { abstractSerializer = new CMapSerializer(); } else if (typeof(IEnumerable).IsAssignableFrom(type)) { abstractSerializer = new CEnumerableSerializer(); } else if (typeof(Stream).IsAssignableFrom(type)) { abstractSerializer = new CInputStreamSerializer(); } else if (typeof(Exception).IsAssignableFrom(type)) { abstractSerializer = new CExceptionSerializer(); } else if (type.IsArray) { abstractSerializer = new CArraySerializer(); } else if (type.IsEnum) { abstractSerializer = new CEnumSerializer(); } else if (typeof(ISerializable).IsAssignableFrom(type)) { abstractSerializer = new CISerializableSerializer(); } else { if (m_htCachedSerializerMap.ContainsKey(type.FullName)) { abstractSerializer = (AbstractSerializer)m_htCachedSerializerMap[type.FullName]; } else { //加锁防止多线程同时添加同一类型 lock (serializerLock) { //可能有一个线程已经添加,这里再判断一次 abstractSerializer = (AbstractSerializer)m_htCachedSerializerMap[type.FullName]; if (abstractSerializer != null) { return(abstractSerializer); } else { abstractSerializer = new CObjectSerializer(type); m_htCachedSerializerMap.Add(type.FullName, abstractSerializer); //abstractSerializer = new CJsonSerializer(); //m_htCachedSerializerMap.Add(type.FullName, abstractSerializer); } } } } } return(abstractSerializer); }