未标记为可序列化错误
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()
实现它。
我有一个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()
实现它。