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

Проблема: при кэшировании экземпляра класса и немедленном извлечении его из кэша я получаю объект обратно (не ноль), но все его свойства / поля имеют значение 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 ответа

Решение

Хорошо нашел это.

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам