实体框架序列化

时间:2013-11-05 18:54:45

标签: c# entity-framework sockets serialization

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

我的问题是:当我尝试序列化一个新的Survey对象并且OPTIONs List为Empty时,我可以序列化对象SURVEY。但是,当我将一个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;
        }
    }

我会感激你的帮助。 感谢。

1 个答案:

答案 0 :(得分:0)

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

您将不得不使用可以处理Entity Framework对象的其他序列化程序,例如JSON.Net,或者编写自己的序列化程序。

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

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