Просто интересно, знает ли кто-нибудь окончательно, что такое сериализация по умолчанию, используемая ASP.net HttpRuntime.Cache? Это двоичный файл, XML, что-то еще?
Я спрашиваю, потому что у меня есть ситуация, когда я заполняю общий список несколькими объектами одного и того же пользовательского типа. Пользовательский тип - это POCO, в этом нет ничего особенного. Все его свойства общедоступны с {get; задавать; }, это публично, у него нет наследования, у него нет интерфейсов. На самом деле это гораздо менее сложно, чем многие другие объекты, которые мы кешируем, которые работают без проблем. Я попытался добавить атрибут [Serializable] в пользовательский класс, и он не имеет никакого эффекта.
Я добавляю список в кеш с уникальным ключом. Список был проверен как заполненный до того, как он был вставлен в кеш, объекты в списке также были проверены как заполненные. Но когда список извлекается из кеша, это пустой список (НЕ NULL), в нем просто нет элементов. Это означает, что список добавляется в кеш и доступен для извлечения, но по какой-то причине в кеше возникают проблемы с сериализацией объектов в списке.
Я просто нахожу это странным, потому что у меня есть еще один список пользовательских объектов, которые намного сложнее (состоящий из Наследования, Интерфейсов, а также содержащих Свойства, которые являются общими списками других сложных объектов), и кэширование этих списков работает без вопрос.
Управление рабочим и нерабочим списками осуществляется в классах C # вне пользовательских элементов управления ASP.net, которые используют кэшированные данные. Оба эти класса обработки кэша вызывают один и тот же экземпляр класса Cache Manager, который обертывает HttpRuntime.Cache, чтобы обеспечить типизированные методы для извлечения и переноса объектов в кеш.
У кого-нибудь есть идеи, что может вызвать это. Единственное, что я могу понять - это то, что свойство Blurb объекта Document потенциально может содержать 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; }
}
Вот подкласс, используемый в свойстве Language
public class Language
{
public string Name { get; set; }
public string Code { get; set; }
}