2017-10-06 9 views
0

をマークされていない「エンティティ」は、私はクラスを持っているとして、直列化エラー

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

私はそれが同じクラスのエンティティのリストであるプロパティChildEntityを持っていることに気づくでしょう。

質問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;} 
} 

親子関係に基づいてEntityクラスのリストを作成するために再帰を実行しています。

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、文化=中立、トークン= null]、アセンブリでSystem.Core、Version = 4.0.0.0、 Culture =ニュートラル、 [Common.Models.Entity、Common、Version = 1.0.0.0、Culture =ニュートラル、 トークン= null] Token = null 'はSerializableとしてマークされていません

+0

メッセージ、ソース、例外タイプ、内部例外を含む例外の完全な 'ToString()'出力は何ですか?完全な例外メッセージで詳細を説明する必要があります。 – dbc

+0

それは意味がありますか? –

+0

完全なコードを掲載してください。 –

答えて

0

は、あなたの問題は、それが.Where()の未評価の結果を参照し、少なくとも一つのEntityインスタンスで、プロパティIEnumerable<Entity> ChildEntityが実際にList<ChildEntity>を参照していない、ということです。 LINQクエリ。

保存する前にToList()で具体化してください。

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]とマークするだけで済みます。例外によって示されるように

+0

更新された投稿をご覧ください。 – siddharth

関連する問題