El almacenamiento en caché de AppFabric - ¿Cuáles son sus requisitos de serialización y deserialización de un objeto?

StackOverflow https://stackoverflow.com/questions/3732050

Pregunta

Problema:. Cuando el almacenamiento en caché una instancia de una clase e inmediatamente conseguir de nuevo fuera de la memoria caché, me sale la parte posterior del objeto (que no es nulo), pero todas sus propiedades / campos son nulos o valores por defecto

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

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

Así que sospecho que la forma en que el objeto está estructurado es el problema y no se AppFabric serializar el objeto correctamente por alguna razón.

Cuando utilizo el siguiente método de serialización sin embargo, consigo la parte posterior objeto con todas las propiedades / campos como estaban antes de la serialización.

    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);
            }
    }

¿Cómo puede un serializar y deserializar objetos correctamente usando el formateador binario y no hacer exactamente lo mismo a través de la memoria caché?

¿Alguien ha encontrado con este o ¿alguien tiene alguna sugerencia o consejos en general, lo que a tener en cuenta?

¿Fue útil?

Solución

Ok encontró.

El objeto implementado IXmlSerializable así AppFabric utilizado que en lugar de la serialización regular.

Funcionamiento a través de un XmlSerializer (en lugar de un BinaryFormatter) da los mismos campos nulos como que estaba experimentando.

Parece que la aplicación IXmlSerializable tiene problemas.

Otros consejos

Creo al serializar a XML (utilizando IXmlSerializable), se ignoran los campos privados de un objeto, que puede ser por eso que su objeto era incompleta tras la recuperación.

Uso Binary serialización asegurará todo el objeto (incluyendo referencias a otros objetos) están incluidos.

Es posible que desee ver en IDataCacheObjectSerializer

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

AppFabric Caché - ¿Puedo especificar serialización estilo utilizado para todos los objetos?

(sí me doy cuenta de esta pregunta era también la suya: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top