Кэширование AppFabric - каковы его требования к сериализации и десериализации для объекта? - PullRequest
3 голосов
/ 17 сентября 2010

Проблема: при кэшировании экземпляра класса и немедленном извлечении его из кэша я возвращаю объект (не ноль), но все его свойства / поля имеют значение null или значения по умолчанию.

    _cacheHelper.PutInCache("testModuleControlInfoOne", mci);
    //mci has populated fields

    var mciFromCacheOne = _cacheHelper.GetFromCache("testModuleControlInfoOne");
    //mciFromCacheOne now has null or default fields

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

Однако, когда я использую следующий метод сериализации, я возвращаю объект со всеми свойствами/ Поля, какими они были до сериализации.

    public T SerializeThenDeserialize<T>(T o) where T : class
    {
            BinaryFormatter bf = new BinaryFormatter();

            using (MemoryStream ms = new MemoryStream())
            {
                bf.Serialize(ms, o);

                ms.Position = 0;

                return (T)bf.Deserialize(ms);
            }
    }

Как объект может сериализовать и десериализовать должным образом с помощью двоичного форматера и не делать точно то же самое с помощью кеширования?или у кого-нибудь есть какие-либо предложения или советы по поводу того, на что обращать внимание?

Ответы [ 3 ]

1 голос
/ 17 сентября 2010

Я полагаю, что при сериализации в Xml (с использованием IXmlSerializable) закрытые поля объекта игнорируются, возможно, поэтому ваш объект был неполным при извлечении.

Использование двоичной сериализации обеспечит защиту всего объекта (включаяссылки на другие объекты).

1 голос
/ 17 сентября 2010

Ok нашел его.

Объект реализовал IXmlSerializable, поэтому AppFabric использовал это вместо обычной сериализации.

Запуск его через XmlSerializer (вместо BinaryFormatter) дает те же нулевые поля, что иЯ испытывал.

Кажется, что реализация IXmlSerializable имеет проблемы.

0 голосов
/ 23 февраля 2013

Вы можете посмотреть на IDataCacheObjectSerializer

http://msdn.microsoft.com/en-us/library/windowsazure/hh552969.aspx

Кэширование AppFabric. Можно ли указать стиль сериализации, используемый для всех объектов?

(да, я понимаю, что этот вопрос был также ваш: -)

...