我有一个班级'实体'
[Serializable]
public class Entity
{
public Guid Id { get; set; }
public IEnumerable<Entity> ChildEntity { get; set; }
}
我会注意到它有属性ChildEntity,它是同一个类Entity的列表。
问题1。我是否必须明确序列化此列表?或者类上的Serializable属性将为我工作。
现在,当我尝试使用二进制序列化程序对此类进行序列化时,我得到一个例外,即此类未标记为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
}
异常消息:
类型 &#39; 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, 标记=空]&#39;在Assembly&System; System.Core,Version = 4.0.0.0, 文化=中立,Token = null&#39;未标记为可序列化
答案 0 :(得分:1)
如异常所示,您的问题是,在至少一个Entity
实例中,属性IEnumerable<Entity> ChildEntity
实际上并未引用List<ChildEntity>
,它指的是未评估的结果一个.Where()
。 LINQ查询。
在存储之前使用ToList()
实现它。
答案 1 :(得分:0)
我已使用以下代码检查其工作正常。
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);
您需要将类标记为[Serializable]。