我有一个名为“Entity”的类。
[Serializable]
public class Entity
{
public Guid Id { get; set; }
public IEnumerable<Entity> ChildEntity { get; set; }
}
我注意到它具有属性ChildEntity,这是一个相同类Entity的列表。
问题1. 我是否需要显式序列化此列表?或者类上的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
}
}
}
我还有一个类,用于填充实体类列表。
[Serializable]
public class AllEntity
{
public Guid ParentId {get; set; }
public Guid Id {get; set;} //childId
public string Desc {get; set;}
}
我正在执行递归操作,根据父子关系构建实体类列表。
public IEnumerable<Entity> Build(IEnumerable<AllEntity> allentity)
{
//recursivey builds List if Entity class
}
异常消息:
程序集'System.Core, Version=4.0.0.0, Culture=neutral, Token=null'中的类型'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]]'没有被标记为可序列化
IEnumerable<Entity> ChildEntity
实际上并不是指向一个List<ChildEntity>
,而是指向.Where()
linq 查询的未评估结果。在序列化之前使用ToList()
来实现它。 - dbc