我正在设计一个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,所以我不能返回一个空数组。
答案 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;
}
}