EF 5 と ASP.NET Web API を使用して、コントローラーから JSON を返しています。私の例はペットサービスです。この質問では、エンティティはClient、Pet、およびVeterinarianです。関係は次のとおりです。
クライアント => 一対多 => ペット => 一対一 => 獣医師
そして、階層を逆にします。
獣医師 => 一対多 => ペット => 一対一 => クライアント
私のPetsControllerでは、GetPetsアクションは次のようになります。
var pets= db.Pets
.Where(p => p.IsActive == true)
.Include(p => p.Client)
.Include(p => p.Veterinarian);
return Mapper.Map<IEnumerable<Pet>, IEnumerable<PetDTO>>(pets); // Using Automapper to map to a DTO
結果の JSON には Pets があり、各 Pet には Client、各 Pet には Veterinarian 、および各 Veterinarian には Pets のコレクションがあります。
ペットのコレクションが JSON に表示される理由は理解できますが、(少なくとも今は) コントローラー アクションからのペットのリストとは関係ありません。ペットのコレクションを削除するエレガントな方法を探しています。現在、私はハックのように感じるものを使用しています:
var pets= db.Pets
.Where(p => p.IsActive == true)
.Include(p => p.Client)
.Include(p => p.Veterinarian);
foreach (Pet pet in pets) {
pet.Veterinarian.Pets = null; // Remove the Pets collection before serializing
}
return Mapper.Map<IEnumerable<Pet>, IEnumerable<PetDTO>>(pets); // Using Automapper to map
IQuerableシリアライザーといくつかの方法 (その多くはよく知らない) でいくつかのことを試しましたが、役に立ちませんでした。