c# - 使用 IEnumerables 序列化类 - 与 Enyim Memcached 一起使用

标签 c# serialization memcached enyim

我有一个看起来像这样的模型:

[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 类不可序列化这一事实。

我用这个小片段测试了这个:

MemoryStream mem = new MemoryStream();
BinaryFormatter b = new BinaryFormatter();
try
{
    b.Serialize(mem, result);
}
catch (Exception ex)
{
    //EXCEPTION HERE
}

它在提示我的 IEnumerable 属性。

实际错误信息是:

Type 'System.Linq.Enumerable+WhereSelectEnumerableIterator`2[[System.Xml.Linq.XElement, System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Desktop.Service.Model.ControlModel, Dekstop.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' in Assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.

我怎样才能解决这个问题?

我希望不必先序列化为 json,如果可能的话在输出时反序列化....

最佳答案

BinaryFormatter 是一个字段级序列化器。它不会关心某些东西是否是 IEnumerable 等。它只关心:“这里的实际 对象是什么?我可以序列化它吗? ”。例如,数组或列表通常是可序列化的。某些自定义延迟序列(可能是经过过滤的 LINQ 表达式)可能不可序列化。

也许还有一个更简单的选择:不要尝试序列化复杂的表达式。所以不是:

obj.Controls = someQuery.Where(x => whatever).OrderBy(x => x.Foo);

做:

obj.Controls = someQuery.Where(x => whatever).OrderBy(x => x.Foo).ToArray();

数组(或列表)简单且可序列化。

关于c# - 使用 IEnumerables 序列化类 - 与 Enyim Memcached 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11311309/

相关文章:

C#窗体在所有窗口之上

java - 替换序列化数据中的类名

c# - 具有 "0"名称(零名称)的 JSON 结果 - 如何在 C# 中创建正确的类?

用不同语言编写的两个程序之间的通信 - 序列化?

php - 如何防止数据库在缓存过期时被应用程序DDOS?

mysql - 使用 mysql 作为 nosql 使用 memcached - 表未更新

c# - 如何在波形的特定点播放mp3?

c# - 在这种情况下,EF Core 生成的 SQL 效率很低,有什么解决方法吗?

C# 需要在多行文本框中使用回车键向下移动一行,不能离开文本框

php - 内存缓存和内存缓存 : "getaddrinfo failed"