编程语言
首页 > 编程语言> > C#-WCF:仅在json上返回必要的属性

C#-WCF:仅在json上返回必要的属性

作者:互联网

由于性能调整,我只想返回必要的属性.有没有可能/解决方法?伪/示例代码了解:

[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(like so)之类的实用程序.

拥有单独的DTO还可以使您扩展核心对象模型,而不会影响客户端性能,并且使版本控制更加简单.

标签:datacontract,datacontractserializer,wcf,json,c
来源: https://codeday.me/bug/20191107/2002761.html