Esempio n. 1
0
        private object deserializeValue(SerializedValue value)
        {
            if (value.IsNullReference())
            {
                return(null);
            }
            var type = deserializeType(value.Type);

            if (type == null)
            {
                throw new InvalidOperationException("Cant deserialize type");
            }
            if (value.IsSimple())
            {
                return(stringSerializer.Deserialize(value.SimpleValue, type));
            }
            if (value.IsArray() && type.IsArray)
            {
                var arr = (IList)Array.CreateInstance(type.GetElementType(), value.ArrayElements.Length);
                for (int i = 0; i < value.ArrayElements.Length; i++)
                {
                    arr[i] = deserializeValue(value.ArrayElements[i]);
                }
                return(arr);
            }
            if (value.IsArray() && isList(type))
            {
                var list = (IList)Activator.CreateInstance(type);
                for (int i = 0; i < value.ArrayElements.Length; i++)
                {
                    list.Add(deserializeValue(value.ArrayElements[i]));
                }
                return(list);
            }
            if (isDictionary(type))
            {
                return(deserializeDictionary(type, value));
            }
            if (value.IsComplex())
            {
                return(deserializeStruct(type, value.ComplexAttributes));                  // struct
            }
            if (value.IsReference())
            {
                return(getOrCreatePO(value.ReferenceIdentifier, type));
            }
            throw new InvalidOperationException("Cant deserialize this type");

            //throw new Exception("Cant serialize value of type: " + getValue.GetType() + " value: " + getValue);
        }