未标记为可序列化错误

sid*_*rth 4 c# serialization binary-serialization

我有一个类“实体”

[Serializable]
public class Entity
{
   public Guid Id { get; set; }
   public IEnumerable<Entity> ChildEntity { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我会注意到它具有属性 ChildEntity,它是同一类实体的列表。

问题1。我是否必须显式序列化此列表?或者类上的 Serializable 属性将为我完成这项工作。

现在,当我尝试使用 Binary Serializer 对此类进行序列化时,出现异常,指出此类未标记为 Serializable。

我认为当它尝试序列化 childEntities 时会发生异常。

这是我的序列化代码。

public static T DeepClone<T>(T obj)
{
    using (var ms = new MemoryStream())
    {
        var formatter = new BinaryFormatter();

        try
        {
            formatter.Serialize(ms, obj);
        }
        catch (Exception Ex)
        {
           //TODO
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个类,其中实体类列表正在填充。

[Serializable]
public class AllEntity
{
    public Guid ParentId {get; set; }
    public Guid Id {get; set;} //childId
    public string Desc {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我正在执行递归以基于父子关系构建实体类列表。

public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity)
{
    //recursivey builds List if Entity class
}
Run Code Online (Sandbox Code Playgroud)

异常消息:

输入'System.LINQ.Enumerable+WhereSelectListIterator`2[[Common.Models.AllEntity, Common, Version=1.0.0.0, Culture=neutral, Token=null], [Common.Models.Entity, Common, Version=1.0.0.0 , Culture=neutral, Token=null]' 在程序集中“System.Core, Version=4.0.0.0, Culture=neutral, Token=null”未标记为可序列化

dbc*_*dbc 5

如异常所示,您的问题是,至少在一种Entity情况下,该属性IEnumerable<Entity> ChildEntity实际上并未引用 a List<ChildEntity>,而是引用a的未评估结果.Where()。LINQ 查询。

以兑现其ToList()之前的存储。