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