Словарь возвращается из кеша как Null/Nothing

Я пишу некоторый код vb.net для извлечения некоторых данных из промежуточного программного обеспечения, что-то с ним делаю, а затем сохраняю словарь пар имя/значение в кэше для быстрого поиска при необходимости.

Кажется, все идет хорошо, пока я не извлекаю объект из кеша, и он всегда равен Null/Nothing.

Тем не менее, в окне просмотра я вижу свой кешированный объект, и в нем есть данные.

Подумав, может быть, это проблема сериализации, я создал новый класс, который наследует Dictionary и помечен как сериализуемый, но все равно получаю те же результаты.

Итак, сейчас у меня есть этот класс:

<Serializable()> Public Class SerialDict
    Inherits Dictionary(Of String, String)

    Public Sub New()

    End Sub

End Class

Я заполняю его и помещаю в кеш следующим образом:

 Dim Licenses As New SerialDict
                For Each r As DataRow In dtLicenses.Rows
                    Dim prikey As String = r("SettingID").ToString.Trim
                    Dim decryptionKey As String = GetHash((xx))

                    Dim licData As String = DecryptData(r("SettingVal"), decryptionKey)

                    Licenses.Add(r("SettingKey"), licData)
                Next

                If IsNothing(HttpContext.Current.Cache("Licenses")) Then
                    HttpContext.Current.Cache.Add("Licences", Licenses, Nothing, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, Nothing)
                End If

Затем в другом месте нам нужно проверить эти данные, поэтому я пытаюсь получить их следующим образом:

Dim Licences As SerialDict = CType(HttpContext.Current.Cache("Licenses"), SerialDict)

В этот момент Licenses всегда имеет значение Nothing, но в окне просмотра отображаются данные в HttpContext.Current.Cache("Licenses").

Какие-либо предложения? Спасибо!


person MattB    schedule 29.04.2016    source источник
comment
Словарь уже сериализуем, поэтому для него не нужен новый класс.   -  person Visual Vincent    schedule 29.04.2016
comment
И, насколько я вижу, вы даже не сериализуете его. Возможно, сериализовать его в строку base64, прежде чем помещать в кеш?   -  person Visual Vincent    schedule 29.04.2016
comment
Спасибо за ответ. Думаю, я недостаточно хорошо понимаю это, чтобы уйти отсюда. Я думал, что если что-то сериализуемо (объявлено как таковое или изначально), это просто позволяет хранить его в сеансе или в кеше. Я не знаком с явной сериализацией для этого использования. Глядя на то, как сериализовать, как вы предлагаете сейчас...   -  person MattB    schedule 29.04.2016
comment
Я не знаю, как работает кеш, но к сериализации это не имеет никакого отношения. Сериализация должна быть сделана вами. Вот как вы можете выполнить двоичную сериализацию (легко конвертируемую в VB.NET через онлайн-конвертер): /а>   -  person Visual Vincent    schedule 29.04.2016
comment
Кроме того, вам, вероятно, следует использовать DirectCast вместо CType.   -  person Visual Vincent    schedule 29.04.2016