【发布时间】:2012-07-03 21:48:04
【问题描述】:
我有一个看起来像这样的模型:
[Serializable]
public class TemplatePageModel
{
public PageModel Page { get; set; }
public SidebarModel Sidebar { get; set; }
}
[Serializable]
public class PageModel
{
public IEnumerable<SectionModel> Section { get; set; }
}
[Serializable]
public class SidebarModel
{
public IEnumerable<ControlModel> Control { get; set; }
}
[Serializable]
public class SectionModel
{
public string Order { get; set; }
public string Editable { get; set; }
public string Column { get; set; }
public string Text { get; set; }
}
然后我尝试使用 EnyimMemcached 将其缓存在 memcached 中。
不会引发异常,但不会存储项目。
我已经追踪到我的 TemplatePageModel 类不可序列化这一事实。
我用这个小 sn-p 测试了这个:
MemoryStream mem = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
try
{
b.Serialize(mem, result);
}
catch (Exception ex)
{
//EXCEPTION HERE
}
它在抱怨我的 IEnumerable 属性。
实际的错误信息是:
类型 'System.Linq.Enumerable+WhereSelectEnumerableIterator`2[[System.Xml.Linq.XElement, System.Xml.Linq,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[Desktop.Service.Model.ControlModel, Dekstop.Service,版本=1.0.0.0,文化=中性, PublicKeyToken=null]]' 在程序集'System.Core,版本=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 未标记为 可序列化。
我怎样才能解决这个问题?
我希望不必先序列化为 json,如果可能的话,在退出时反序列化....
【问题讨论】:
-
定义“抱怨”。告诉我们确切的信息。实际上,请注意
BinaryFormatter并不关心是否是IEnumerable- 它是一个字段级序列化程序。它可能关心的是一些不是[Serializable]的东西。那么:.Section和.Control在运行时实际上是什么? -
抱歉,现在编辑显示实际错误信息
标签: c# serialization memcached enyim