RESTful API返回子实体

时间:2015-03-26 09:23:47

标签: rest asp.net-web-api

我正在设计一个web api,客户可以在其中检索有关课程的信息。 在我的模型中,实体课程有几个属性,包括属性教师。教练是一个独立的课程。

public class Course
{
    public int Id { get; set; }
    public string Title { get; set; }
    public double? Duration { get; set; }
    ...
    public Instructor Instructor { get; set; }
}

public class Instructor
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    ...
}

我的问题是,如果我在调用课程控制器时返回所有教师属性,请将教师设置为null或者根本不回溯它? 或者还有其他选择吗?

我不知道在这种情况下最佳做法是什么。当子实体是一个集合时,我通常只返回一个空数组。但在这种情况下,只有1,所以我不能返回一个空数组。

1 个答案:

答案 0 :(得分:0)

最佳做法是序列化该子实体,只有在客户端需要从此请求返回时才需要。否则,您只是转移不必要的数据。

使应用程序决定是否对其进行序列化(使用Newtonsoft),您可以实现自定义数据协定解析器并在序列化实体时使用它:

public class CustomDataContractResolver : DefaultContractResolver
{
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);

        if ((property.DeclaringType == typeof(Course) ||
            property.DeclaringType.BaseType == typeof(Course)) &&
            property.PropertyName == "Instructor")
        {
            property.ShouldSerialize =
               instance =>
               {
                   return true; // or false
               };
        }

        return property;
    }
}