AppFabric Caching - Quali sono i suoi requisiti di serializzazione e deserializzazione di un oggetto?
-
03-10-2019 - |
Domanda
. Problema: quando la memorizzazione nella cache un'istanza di una classe e subito ottenerlo indietro di cache, ottengo la parte posteriore dell'oggetto (la sua non nullo), ma tutte le sue proprietà / campi sono nulli o valori di default
_cacheHelper.PutInCache("testModuleControlInfoOne", mci);
//mci has populated fields
var mciFromCacheOne = _cacheHelper.GetFromCache("testModuleControlInfoOne");
//mciFromCacheOne now has null or default fields
Così ho il sospetto che il modo in cui l'oggetto è strutturato è il problema e AppFabric non è serializzazione l'oggetto correttamente per qualche motivo.
Quando uso il seguente metodo di serializzazione però, ho la schiena oggetto con tutte le proprietà / campi come lo erano prima di serializzazione.
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);
}
}
Come può un oggetto serializzare e deserializzare correttamente utilizzando il formattatore binario e non fare esattamente la stessa cosa tramite la cache?
Qualcuno ha incontrato questo o qualcuno ha suggerimenti o consigli su come in generale quello di guardare fuori per?
Soluzione
Ok trovato.
L'oggetto implementato IXmlSerializable modo AppFabric usato che invece di serializzazione regolare.
L'esecuzione attraverso un XmlSerializer (invece di un BinaryFormatter) dà gli stessi campi nulli come stavo vivendo.
Sembra l'attuazione IXmlSerializable ha problemi.
Altri suggerimenti
Credo che durante la serializzazione in XML (utilizzando IXmlSerializable), i campi privati ??di un oggetto vengono ignorate, che può essere il motivo per cui l'oggetto era incompleta sul recupero.
Utilizzando binario serializzazione assicurerà l'intero oggetto (compresi i riferimenti ad altri oggetti) sono inclusi.
Si consiglia di guardare IDataCacheObjectSerializer
http://msdn.microsoft.com/en-us /library/windowsazure/hh552969.aspx
AppFabric Caching - Posso specificare la serializzazione stile utilizzato per tutti gli oggetti?
(sì mi rendo conto che questa domanda è stato anche il vostro: -)