Esempio n. 1
0
        // Serialization of ref type elements that uses ref type caching (string and so on)
        private void SerializeInternal(T[] valueToSerialize, BaseSerializerInfo <T> serializerInfo, IRefTypeObjectsDictionary objectCache)
        {
            Action arraySerializationAction = () =>
            {
                // Serializer of an element
                ICachedObjectSerializer <T> serializer = (serializerInfo as CachedRefObjectSerializerInfo <T>).FactoryFunc(SerializerStorage, objectCache);

                // Serialize all the elems
                for (int pos = 0; pos < valueToSerialize.Length; pos++)
                {
                    serializer.Serialize(valueToSerialize[pos]);
                }
            };

            SerializeInternal(valueToSerialize, arraySerializationAction);
        }
Esempio n. 2
0
        // Serialization of simple elements, that doesn't use caching
        private void SerializeInternal(T[] valueToSerialize, BaseSerializerInfo <T> serializerInfo)
        {
            Action arraySerializationAction = () =>
            {
                // Serializer of an element
                IObjectSerializer <T> serializer = (serializerInfo as NormalObjectSerializerInfo <T>).FactoryFunc(SerializerStorage);

                // Serialize all the elems
                for (int pos = 0; pos < valueToSerialize.Length; pos++)
                {
                    serializer.Serialize(valueToSerialize[pos]);
                }
            };

            SerializeInternal(valueToSerialize, arraySerializationAction);
        }
Esempio n. 3
0
        // Serialization of ref type elements that uses ref type caching (string and so on)
        private T[] DeserializeInternal(BaseSerializerInfo <T> serializerInfo, IRefTypeObjectsDictionary objectCache)
        {
            Action <int, T[]> action = (arrayLength, outputArray) =>
            {
                // Serializer of an element
                ICachedObjectSerializer <T> serializer = (serializerInfo as CachedRefObjectSerializerInfo <T>).FactoryFunc(SerializerStorage, objectCache);

                // Deserialize all the elems
                for (int pos = 0; pos < arrayLength; pos++)
                {
                    T value = serializer.Deserialize();
                    outputArray[pos] = value;
                }
            };

            return(DeserializeInternal(action));
        }
Esempio n. 4
0
        // Deserialization of simple elements, that doesn't use caching
        private T[] DeserializeInternal(BaseSerializerInfo <T> serializerInfo)
        {
            Action <int, T[]> action = (arrayLength, outputArray) =>
            {
                // Serializer of an element
                IObjectSerializer <T> serializer = (serializerInfo as NormalObjectSerializerInfo <T>).FactoryFunc(SerializerStorage);

                // Deserialize all the elems
                for (int pos = 0; pos < arrayLength; pos++)
                {
                    T value = serializer.Deserialize();
                    outputArray[pos] = value;
                }
            };

            return(DeserializeInternal(action));
        }
Esempio n. 5
0
        public T[] Deserialize()
        {
            // Serializer info for the element
            BaseSerializerInfo <T> serializerInfo = (WKTSerializationFactory.GetSerializersForType(typeof(T).TypeHandle) as BaseSerializerInfo <T>);

            switch (serializerInfo.SerializerKind)
            {
            case SerializerKind.Normal:
                return(DeserializeInternal(serializerInfo));

            case SerializerKind.CachedVal:
                return(DeserializeInternal(serializerInfo, (this.SerializerStorage as Serializer).ValObjectsCache));

            case SerializerKind.CachedRef:
                return(DeserializeInternal(serializerInfo, (this.SerializerStorage as Serializer).RefObjectsCache));
            }

            return(null);
        }
Esempio n. 6
0
        // Serialization of simple elements, that doesn't use caching
        public void Serialize(T[] valueToSerialize)
        {
            // Serializer info for the element
            BaseSerializerInfo <T> serializerInfo = (WKTSerializationFactory.GetSerializersForType(typeof(T).TypeHandle) as BaseSerializerInfo <T>);

            switch (serializerInfo.SerializerKind)
            {
            case SerializerKind.Normal:
                SerializeInternal(valueToSerialize, serializerInfo);
                return;

            case SerializerKind.CachedVal:
                SerializeInternal(valueToSerialize, serializerInfo, (this.SerializerStorage as Serializer).ValObjectsCache);
                return;

            case SerializerKind.CachedRef:
                SerializeInternal(valueToSerialize, serializerInfo, (this.SerializerStorage as Serializer).RefObjectsCache);
                return;
            }
        }