初めての ASP.NET MVC4 Web API を作成しています。20 ほどのエンティティが既に作成され、Azure でホストされているデータベースがあり、Entity Framework を使用してデータベースを POCO クラスにリバース エンジニアリングしました。
彼らは最終的に次のようになりました。
public class Activity
{
public Activity()
{
this.ActivityCategories = new List<ActivityCategory>();
this.ActivityImages = new List<ActivityImage>();
this.PerformedActivities = new List<PerformedActivity>();
this.UserActivities = new List<UserActivity>();
}
public int ActivityID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Nullable<int> Thumbnail { get; set; }
public virtual Image Image { get; set; }
public virtual ICollection<ActivityCategory> ActivityCategories { get; set; }
public virtual ICollection<ActivityImage> ActivityImages { get; set; }
public virtual ICollection<PerformedActivity> PerformedActivities { get; set; }
public virtual ICollection<UserActivity> UserActivities { get; set; }
}
次に、次のようなアクションで ApiController 拡張クラスを作成しました。
public IEnumerable<Activity> All()
{
return db.Activities.ToArray();
}
そして、予想通り、非常に長い JSON 応答が返されました。JSON 応答には、Activity クラスで定義されたすべてが含まれていました。しかし、すべてを含めたくない場合はどうすればよいでしょうか? たとえば、UserActivities、PerformedActivities などを返したくありません。
基本的に、JSON は次のようになります。
[
{
"id":"32",
"name":"this activity name",
"description":"blah blah",
"thumbnail":"http://mydomain.com/images/32/thumbnail.png",
"images": [
{
"name":"this image",
"url":"http://mydomain.com/images/32/1.png",
},
{
"name":"cool image",
"url":"http://mydomain.com/images/32/2.png",
},
],
},
...
]
(JSON の書式設定エラーは無視して、例をすばやく入力してください)
必ずしも同じプロパティ名を使用したくないことに注意してください。データを必要な形式に変換する効率的な方法はありますか?
最初に考えたのは、必要なプロパティのみを含む構造体の配列に各アクティビティをコピーすることです。よりエレガントなソリューションはありますか?