由于性能调优,我想只返回必要的属性。有可能/解决方法吗?伪/示例代码要理解:
[DataContract]
public interface IMemberOverview
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
[DataContract]
public interface IMemberDetail
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Status { get; set; }
[DataMember]
public string Infos { get; set; }
}
public class Member : IMemberOverview, IMemberDetail
{
public int Id { get; set; }
public string Name { get; set; }
public string Status { get; set; }
public string Infos { get; set; }
}
和服务:
[OperationContract]
[WebInvoke(
Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "ListMembers")]
[KnownType(typeof(Member))]
public List<IMemberOverview> ListMembers()
{
return MemberDAO.Instance().GetAll();
}
[OperationContract]
[WebInvoke(
Method = "GET",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "Member/{idString}")]
[KnownType(typeof(Member))]
public List<IMemberDetail> Member(string idString)
{
var id = int.Parse(idString);
return MemberDAO.Instance().Get(id);
}
答案 0 :(得分:2)
如果要在对象模型上公开不同的视图,那么最简单的方法就是在较薄的DTO上公开数据 - 即编写第二个类(通常在不同的命名空间中)并在它们之间转换数据。手动(编写一些代码,可能是静态转换运算符,这样做),或使用PropertyCopy
(like so)等实用程序。
拥有单独的DTO还允许您扩展核心对象模型,而不会无声地影响客户端性能,并使版本控制更加简单。
答案 1 :(得分:2)
如果我理解你的问题,[DataMember(EmitDefaultValue = false)]可能会有所帮助。