Ejemplo n.º 1
0
        public bool RegisterSerializer(ILiteSerializer serializer, short handle)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            lock (_typeSerializerMap.SyncRoot)
            {
                if (_handleSerializerMap.Contains(handle))
                {
                    throw new ArgumentException("Specified type handle is already registered.");
                }
                if (GetSerializerForTypeStrict(serializer.Type) != null)
                {
                    throw new ArgumentException("Type '" + serializer.Type.FullName + "' is already registered");
                }

                if (!_typeSerializerMap.Contains(serializer.Type.FullName))
                {
                    serializer.Handle = handle;
                    _typeSerializerMap.Add(serializer.Type.FullName, serializer);
                    _handleSerializerMap.Add(serializer.Handle, serializer);
                    return(true);
                }
            }
            return(false);
        }
Ejemplo n.º 2
0
        public void WriteObject(object obj)
        {
            ILiteSerializer serializer = _serializationContext.SerializerFactory.GetSerializerForObject(obj);

            _writer.Write(serializer.Handle);
            serializer.Write(this, obj);
        }
Ejemplo n.º 3
0
        public bool RegisterSerializer(ILiteSerializer serializer)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            return(RegisterSerializer(serializer, ++_newhandle));
        }
Ejemplo n.º 4
0
        internal ILiteSerializer GetSerializerForHandle(short handle)
        {
            ILiteSerializer serializer = (ILiteSerializer)_handleSerializerMap[handle];

            if (serializer == null)
            {
                serializer = _defaultSerializer;
            }
            return(serializer);
        }
Ejemplo n.º 5
0
        internal ILiteSerializer GetSerializerForType(Type type)
        {
            ILiteSerializer serializer = (ILiteSerializer)_typeSerializerMap[type.FullName];

            if (serializer == null)
            {
                serializer = _defaultSerializer;
            }
            return(serializer);
        }
Ejemplo n.º 6
0
        public void WriteObjectAs(Type type, object obj)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            ILiteSerializer serializer = _serializationContext.SerializerFactory.GetSerializerForType(type);

            serializer.Write(this, obj);
        }
Ejemplo n.º 7
0
        public void UnregisterSerializer(ILiteSerializer serializer)
        {
            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            lock (_typeSerializerMap.SyncRoot)
            {
                _typeSerializerMap.Remove(serializer.Type.FullName);
                _handleSerializerMap.Remove(serializer.Handle);
            }
        }
Ejemplo n.º 8
0
        public void RegisterLiteSerializableType(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (GetSerializerForTypeStrict(type) != null)
            {
                throw new ArgumentException("Type '" + type.FullName + "' is already registered");
            }

            ILiteSerializer serializer = null;

            if (typeof(IDictionary).IsAssignableFrom(type))
            {
                serializer = new LiteDictionarySerializer(type);
            }
            else if (type.IsArray)
            {
                serializer = new LiteArraySerializer(type);
            }
            else if (typeof(IList).IsAssignableFrom(type))
            {
                serializer = new LiteIListSerializer(type);
            }
            else if (typeof(ILiteSerializable).IsAssignableFrom(type))
            {
                serializer = new LiteILiteSerializableSerializer(type);
            }
            else if (typeof(Enum).IsAssignableFrom(type))
            {
                serializer = new LiteEnumSerializer(type);
            }

            if (serializer == null)
            {
                throw new ArgumentException("No appropriate serializer found for type " + type.FullName);
            }

            RegisterSerializer(serializer);
        }
Ejemplo n.º 9
0
        public void UnregisterLiteSerializableType(Type type)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }
            if (GetSerializerForTypeStrict(type) == null)
            {
                return;
            }

            if (type.IsArray ||
                typeof(IDictionary).IsAssignableFrom(type) ||
                typeof(IList).IsAssignableFrom(type) ||
                typeof(ILiteSerializable).IsAssignableFrom(type) ||
                typeof(Enum).IsAssignableFrom(type))
            {
                ILiteSerializer serializer = GetSerializerForTypeStrict(type);
                UnregisterSerializer(serializer);
            }
        }