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