WCF:回报JSON只在必要的属性
-
19-09-2019 - |
题
由于性能调整的我想只返回必要的属性。有没有一种可能/解决方法吗?伪/样本码明白:
[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);
}
解决方案
如果要公开在您的对象模型中的不同的视图,则该简单的方法是简单地以暴露数据上更薄DTO - 即写一个第二类(通常在不同的命名空间)和它们之间的数据转换。或者通过手(写一些代码,或许一个静态转换运算符,执行此),或用相似的PropertyCopy
工具(像这样一>)。
有一个单独的DTO,您还可以默默不影响客户端的性能扩展您的核心对象模型,同时简化版本要简单得多。
其他提示
如果我正确理解您的问题,[数据成员(EmitDefaultValue =假)]可以帮助。
不隶属于 StackOverflow