我正在创建我的第一个 ASP.NET MVC4 Web API。我有一个数据库,其中已经在 Azure 上创建和托管了 20 个左右的实体,并使用 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 中的任何格式错误,只是非常快地输入了示例)
请注意,我也不一定要使用相同的属性名称。有没有一种有效的方法可以将我的数据转换成我想要的格式?
我的第一个想法是将每个活动复制到一个仅包含我想要的属性的结构数组中。有没有更优雅的解决方案?