没有标记为可序列化的错误

问题描述:

我有一类“实体”没有标记为可序列化的错误

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

我会注意到它具有财产ChildEntity是同一类实体的名单。

问题1。我必须明确地序列化这个列表吗?或者该类的可序列化属性将为我工作。

现在,当我尝试使用二进制序列化器对此类进行序列化时,我得到异常说这个类未标记为可序列化。

我认为当它试图序列化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.LINQ.Enumerable + WhereSelectListIterator`2 [[Common.Models.AllEntity, 普通,版本= 1.0.0.0,文化=中性,'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,令牌=空'未标记为可序列化

+0

什么是包含消息,源,异常类型和内部异常的异常的完整'ToString()'输出?完整的例外信息应该解释更多。 – dbc

+0

它有任何意义吗? –

+0

您可以发布您的完整代码进行调查。 –

正如例外说明,你的问题是,在至少一个Entity例如,财产IEnumerable<Entity> ChildEntity实际上并不指List<ChildEntity>,它指的是一个.Where()的未计算结果。 LINQ查询。

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

我检查了下面的代码,它的工作正常。

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]即可。

+0

请参阅更新后的帖子。 – siddharth