【问题标题】:Serializing POCO Entities序列化 POCO 实体
【发布时间】:2011-03-24 06:26:57
【问题描述】:

我可以序列化 POCO 类吗?我正在使用 C# POCO 实体生成器。

我尝试编辑生成实体类的 .tt 文件以添加 Serializable 属性。对吗?

【问题讨论】:

    标签: .net serialization entity-framework-4 poco


    【解决方案1】:

    您使用的是 POCO 代理,而不是纯 POCO。如果(显然)它们是可序列化的,那么纯 POCO 可以被序列化。代理可能不是。

    【讨论】:

    • 如果我使用 ADO.NET POCO 实体生成器生成 POCO 实体,如何序列化 POCO?当我将上下文的 ProxyCreationEnabled 属性设置为 false 时,代理创建已经被禁用,所以我确定我没有使用这些代理。
    • 您始终可以序列化真实的 POCO。如果您使用的代理不是真正的 POCO,那么您应该投影到真正的 POCO。我通常在序列化之前投影到匿名类型,因为这样可以保证没有循环引用,这通常会杀死序列化。
    • 嗨克雷格!之后你如何反序列化匿名类型?我也有循环引用的问题,然后考虑了我们的匿名类型方法,但我不确定如何反序列化它们......你能提供一个例子吗?非常感谢!
    • @byte_slave:实际上,我没有。我的具体情况是我必须序列化为 JSON,但不需要反序列化。
    • 你很幸运 :) 对我来说,我可以将我的 POCO 类标记为可序列化,但问题是每次 EM 更改时,它都会重新创建 POCO 类并删除我之前手动编写的序列化属性......这很糟糕......一遍又一遍地重做这个是不切实际的......根据我对如何序列化实体的快速研究,出现了 WCF 序列化方法,但我没有使用 WCF 的经验,所以我想逃避从中...无论如何感谢您的意见。问候!
    【解决方案2】:

    我们负担不起禁用 ProxyCreation(显而易见的解决方案)。相反,我们使用Value Injecter 来解决它。很简单:

    var dynamicProxyMember = _repository.FindOne<Member>(m=>m.Id = 1);
    var member = new Member().InjectFrom(dynamicProxyMember) as Member;
    

    享受吧!

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 2023-03-30
      相关资源
      最近更新 更多