【发布时间】:2011-01-10 21:36:57
【问题描述】:
只是想知道是否有人明确知道 ASP.net HttpRuntime.Cache 使用的默认序列化是什么?是二进制、XML 还是其他?
我问是因为我有一种情况,我正在用相同自定义类型的多个对象填充一个通用列表。自定义类型是 POCO,没有什么特别之处。它的所有属性都是公开的 { get;放; },它是公共的,没有继承,没有接口。事实上,它比我们缓存的许多其他对象要简单得多,这些对象可以正常工作。我尝试将 [Serializable] 属性添加到自定义类,但没有效果。
我使用唯一键将列表添加到缓存中。该列表在插入缓存之前已被验证为已填充,列表中的对象也已被验证为已填充。但是当列表从缓存中拉出时,它是一个空列表(NOT NULL),它根本没有任何项目。这意味着该列表正在被添加到缓存中并且是可检索的,但由于某种原因,缓存在序列化列表中的对象时出现问题。
我只是觉得这很奇怪,因为我有另一个更复杂的自定义对象列表(包括继承、接口,还包含属性,这些属性是其他复杂对象的通用列表)并且这些列表的缓存无需问题。
工作和非工作列表都在消耗缓存数据的 ASP.net 用户控件之外的 C# 类中进行管理。这两个缓存处理类都调用完全相同的缓存管理器类单例实例,该实例包装了 HttpRuntime.Cache 以提供用于将对象拉入和推送到缓存中的类型化方法。
任何人都知道可能导致这种情况发生的原因。我唯一能想到的是 Document 对象的“Blurb”属性可能包含 HTML,但如果 ASP.net 对缓存使用二进制序列化,我看不出这将如何做任何事情。
这是课程
public class Document
{
public string ContentTypeId { get; set; }
public string ContentId { get; set; }
public bool IsCustom { get; set; }
public Language DocLanguage { get; set; }
public string RegularTitle { get; set; }
public string InvertedTitle { get; set; }
public string Blurb { get; set; }
}
这是语言属性中使用的子类
public class Language
{
public string Name { get; set; }
public string Code { get; set; }
}
【问题讨论】: