Shouldn't you use the value property of the datacache item?
Currently not behind a Visual Studio so i'm writing this without a compiler.
var isValueInCache = BaseCache.Instance().RetrieveCacheValue("allGenders") as DataCacheItem;
//TypeCasting of Data
var isSeariled = isValueInCache == null ?
Newtonsoft.Json.JsonConvert.DeserializeObject(proxy.GetAllGenders(),
typeof(List<HumanGender>)) as List<HumanGender>
: isValueInCache.Value as List<HumanGender>;
Edit:
I think the RetrieveCacheValue method of your BaseCache returns the wrong type.