C# 未标记为可序列化错误

C# 未标记为可序列化错误,c#,serialization,binary-serialization,C#,Serialization,Binary Serialization,我有一个“实体”类 [Serializable] public class Entity { public Guid Id { get; set; } public IEnumerable<Entity> ChildEntity { get; set; } } 我正在执行递归以基于父子关系构建实体类列表 public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity) {

我有一个“实体”类

[Serializable]
public class Entity
{
   public Guid Id { get; set; }
   public IEnumerable<Entity> ChildEntity { get; set; } 
}
我正在执行递归以基于父子关系构建实体类列表

public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity)
{
    //recursivey builds List if Entity class
}
公共IEnumerable生成(IEnumerable allentity)
{
//递归生成实体类的列表
}
异常消息:

类型 'System.LINQ.Enumerable+其中SelectListIterator'2[[Common.Models.AllEntity, 通用,版本=1.0.0.0,区域性=中性,标记=空], [Common.Models.Entity,Common,Version=1.0.0.0,Culture=neutral, Token=null]“在程序集中”System.Core,版本=4.0.0.0, 区域性=中性,标记=null'未标记为可序列化


我已经用下面的代码检查了它的工作状态

Entity ea = new Entity();
ea.Id = Guid.NewGuid();
var li = new List<Entity>();
li.Add(new Entity { Id = Guid.NewGuid() });
ea.ChildEntity = li;
DeepClone<Entity>(ea);
实体ea=新实体();
ea.Id=Guid.NewGuid();
var li=新列表();
添加(新实体{Id=Guid.NewGuid()});
ea.ChildEntity=li;
深度克隆(ea);

只需将类标记为[Serializable]。

如异常所示,您的问题是,在至少一个
实体
实例中,属性
IEnumerable ChildEntity
实际上并不引用
列表
,而是引用.LINQ查询的未计算结果


在存储之前将其具体化。

完整的
ToString()是什么
异常的输出,包括消息、源、异常类型和内部异常?完整的异常消息应该解释得更多。这有什么意义吗?请发布完整的代码进行研究。您的问题是
IEnumerable ChildEntity
实际上并没有引用
列表,而是引用了未计算的
.Where()
linq查询结果。在序列化之前,使用
ToList()
将其具体化。@dbc您是一个救生员!!:D
public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity)
{
    //recursivey builds List if Entity class
}
Entity ea = new Entity();
ea.Id = Guid.NewGuid();
var li = new List<Entity>();
li.Add(new Entity { Id = Guid.NewGuid() });
ea.ChildEntity = li;
DeepClone<Entity>(ea);