未标记为可序列化错误

Not marked as Serializable error

我有一个class'Entity'

[Serializable]
public class Entity
{
   public Guid Id { get; set; }
   public IEnumerable<Entity> ChildEntity { get; set; } 
}

我会注意到它有 属性 ChildEntity,它是相同 class 实体的列表。

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

现在,当我尝试使用 Binary Serializer 序列化此 class 时,出现异常,提示此 class 未标记为可序列化。

我认为当它试图序列化 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
    }
    }
}

我还有一个 class 从那里填充实体列表 Class。

[Serializable]
public class AllEntity
{
    public Guid ParentId {get; set; }
    public Guid Id {get; set;} //childId
    public string Desc {get; set;}
}

我正在执行递归以根据父子关系构建实体列表 class。

public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity)
{
    //recursivey builds List if Entity class
}

异常消息:

Type '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]' in Assembly 'System.Core, Version=4.0.0.0, Culture=neutral, Token=null' is not marked as Serializable

我已经用下面的代码检查它工作正常。

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);

只需要将class标记为[Serializable]即可。

如异常所示,您的问题是,在至少一个 Entity 实例中,属性 IEnumerable<Entity> ChildEntity 实际上并不引用 List<ChildEntity>,它指的是 .Where() 的未计算结果。 LINQ 查询。

在存储前用 ToList() 实现它。