【问题标题】:WCF: return only necessary properties on jsonWCF:仅在 json 上返回必要的属性
【发布时间】:2009-09-30 09:56:30
【问题描述】:

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

[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);
}

【问题讨论】:

    标签: c# wcf json datacontractserializer datacontract


    【解决方案1】:

    如果您想在对象模型上公开不同的视图,那么最简单的方法就是在更精简的 DTO 上公开数据 - 即编写第二个类(通常在不同的命名空间中)并在它们之间转换数据。手动(编写一些代码,可能是静态转换运算符),或者使用PropertyCopy (like so) 之类的实用程序。

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

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,[DataMember(EmitDefaultValue=false)] 可能会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多