2009-09-30 4 views
3

성능 튜닝 때문에 필요한 속성 만 반환하고 싶습니다. 가능성/해결 방법이 있습니까? 의사/샘플 코드는 이해하기 :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); 
} 

답변

2

당신이 당신의 개체 모델에 다른보기를 노출 할 경우, 가장 간단한 방법은의 데이터를 노출하는 것입니다을 더 얇은 DTO - 두 번째 클래스 (일반적으로 다른 네임 스페이스에 있음)를 작성하고 두 클래스 간의 데이터를 변환합니다. 손으로 (이 작업을 수행하는 일부 코드, 아마도 정적 변환 연산자 작성) 또는 PropertyCopy (like so)과 같은 유틸리티를 사용하십시오.

별도의 DTO를 사용하면 클라이언트 성능에 아무런 영향을주지 않고 핵심 개체 모델을 확장 할 수 있으므로 버전 관리가 훨씬 간단 해집니다.

2

질문을 올바르게 이해하면 [DataMember (EmitDefaultValue = false)]가 도움이 될 수 있습니다.