El almacenamiento en caché de AppFabric - ¿Cuáles son sus requisitos de serialización y deserialización de un objeto?
-
03-10-2019 - |
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?
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: -)