将缓存项转换为特定的对象类型,以便通过webmethod返回

本文关键字:返回 webmethod 类型 对象 转换 缓存 | 更新日期: 2023-09-27 18:26:05

我已经成功地在web服务中缓存了一个大型数据项,但如果我想稍后返回该缓存项,而不是再次运行冗长的查询,我如何将通用缓存项转换为我自己设计的对象?

例如

HttpContext.Current.Cache.Insert("cItem", [MyItem]));

然后

return HttpContext.Current.Cache["cItem"];

将在Visual Studio中显示错误,因为我无法将类型"object"转换为自己的类型。感谢任何指针感谢

将缓存项转换为特定的对象类型,以便通过webmethod返回

Cache[string]返回一个object。虽然MyItem的任何实例都可以隐式转换为object,但事实显然并非如此。

因此,如果方法的返回类型是MyItem,则需要强制转换缓存项:

public MyItem MyMethod()
{
    return (MyItem)HttpContext.Current.Cache["cItem"];
}

这是在从缓存中检索时完成的,而不是在存储时完成的

如果项可能不是预期类型的,则必须以某种方式处理该条件。如果发生这种情况,上面的代码将抛出一个InvalidCastException。在这种情况下,如果您只想返回null,您可以尝试以下操作:

public MyItem MyMethod()
{
    return HttpContext.Current.Cache["cItem"] as MyItem;
}
// if its a string etc.
return (string)HttpContext.Current.Cache["cItem"]; 
// if its a List of a custom object 
return (List<CustomObject>)HttpContext.Current.Cache["cItem"];