由于性能调整的我想只返回必要的属性。有没有一种可能/解决方法吗?伪/样本码明白:

[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 =假)]可以帮助。

scroll top