Entity Framework Self-Tracking Entitiesの完全なオブジェクト グラフ (1 対多の関係にある親 + 子) を Json にシリアル化したいと考えています。
シリアル化には、ServiceStack.JsonSerializerを使用します。
これは私のデータベースがどのように見えるかです (簡単にするために、無関係なフィールドをすべて削除しました):
この方法で完全なプロファイル グラフを取得します。
public Profile GetUserProfile(Guid userID)
{
using (var db = new AcmeEntities())
{
return db.Profiles.Include("ProfileImages").Single(p => p.UserId == userId);
}
}
問題は、それをシリアル化しようとすることです:
Profile profile = GetUserProfile(userId);
ServiceStack.JsonSerializer.SerializeToString(profile);
を生成しStackOverflowException
ます。これは、シリアライザーを台無しにする無限モデルを EF が提供しているためだと思います。つまり、技術的には : などを呼び出すことができますprofile.ProfileImages[0].Profile.ProfileImages[0].Profile ...
。
EF オブジェクト グラフを「平坦化」したり、ServiceStack.JsonSerializerがスタック オーバーフロー状態にならないようにするにはどうすればよいですか?
注:オブジェクトを匿名型に投影したくありません(これらの 提案のように)、非常に長くて保守が難しいコードの断片が導入されるためです)。