【问题标题】:entity framework serialize [duplicate]实体框架序列化[重复]
【发布时间】:2013-11-05 18:54:45
【问题描述】:

我在制作客户端-服务器应用程序时遇到问题。 我正在使用 Entity Framework(EF),我需要序列化一个对象以通过包含 List 属性的套接字发送它。 我将 XMLSerialization 用于序列化部分。

我的问题是:当我尝试序列化一个新的调查对象并且选项列表为空时,我可以序列化对象调查。但是,当我将 OPTION 对象添加到 SURVEY.OPTIONS 列表时,我无法序列化该对象。

EF 从实体关系图自动生成的类之一是:

public partial class SURVEY
{
    public SURVEY()
    {
        this.OPCIONs = new List<OPTION>();
    }

    public int id_survey { get; set; }
    public System.DateTime initial_date { get; set; }
    public System.DateTime end_date { get; set; }
    public virtual List<OPTION> OPTIONs { get; set; }
}

我正在使用此代码从数据库中获取调查:

DateTime actualDate = new DateTime().Today;
private static ComedorCaniaDBContext context = new ComedorCaniaDBContext();
Survey survey = context.SURVEYs.Create()
survey = (SURVEY)context.SURVEYs
                    .Include("Options")
                    .Where(e => e.initial_date < actualDate && e.end_date > actualDate)
                    .FirstOrDefault();

我正在使用此代码进行序列化:

public static Byte[] ObjectToByteArray<T>(T obj)
    {
        try
        {
            using (MemoryStream ms = new MemoryStream())
            {
                XmlSerializer xmlS = new XmlSerializer(typeof(T));
                xmlS.Serialize(ms, obj);

                return ms.ToArray();
            }
        }
        catch
        {
            return null;
        }
    }

感谢您的帮助。 谢谢。

【问题讨论】:

  • 除了“它不起作用”之外究竟发生了什么?
  • 选项是否可序列化?它有一个空的构造函数吗?抛出什么异常?
  • 选项是可序列化的。抛出的异常类似于:“System.InvalidOperationException:检测到循环引用试图序列化 ServidorComedor.Models.SURVEY 类型的对象......”

标签: c# entity-framework sockets serialization


【解决方案1】:

如果您不想失去延迟加载等功能,实体框架几乎不可能使用内置的 XML 序列化程序和 BinaryFormatter 序列化程序。他们只是不适合处理这个问题。

您将不得不使用可以处理实体框架对象的不同序列化程序,例如 JSON.Net,或者编写自己的序列化程序。

请参阅以下文章了解其他有相同问题的人:

基本上,您要么保持延迟加载并使用其他序列化程序,要么丢失它并继续使用内置序列化程序。

【讨论】:

  • 任何形式的序列化都不能使用延迟加载。然而,这里的情况并非如此。 OPTION 实例被显式加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多