问题:当缓存类的实例并立即将其从缓存中取出时,我取回了对象(它不为空),但其所有属性/字段均为空或默认值。
_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);
}
}
对象如何使用二进制格式化程序正确序列化和反序列化,而不是通过缓存执行完全相同的操作?
有没有人遇到过这种情况,或者有没有人对一般要注意的事项有任何建议或提示?
好的找到了。
该对象实现了 IXmlSerialized,因此 AppFabric 使用它而不是常规序列化。
通过 XmlSerializer(而不是 BinaryFormatter)运行它会给出与我遇到的相同的空字段。
IXmlSerialized 实现似乎有问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)