2010-05-03 2 views
0

WCF에서 소비하기 위해 WCF를 통해 데이터 컬렉션의 하위 집합을 푸시하려고합니다. 즉, 페이징 된 데이터를 생각합니다. 따라서이 컬렉션은 한 페이지 분량의 데이터와 총 수의 결과를 갖기를 바랍니다. List를 확장하는 사용자 정의 객체를 만들어이 작업이 간단해야한다고 생각했습니다. 그러나, 내가하는 모든 일은 내 TotalNumber 속성에서 0으로 오게됩니다. 모든 데이터가 직렬화/직렬화가 올바르게 처리되지만 그 단일 정수는 전혀 나타나지 않습니다.이 목록을 serialize 할 수 없음 <T> 내선

여기에 실패 내 첫 번째 시도이다 :

[Serializable] 
public class PartialList<T> : List<T> 
{ 
    public PartialList() 
    { 

    } 

    public PartialList(IEnumerable<T> collection) 
     : base(collection) 
    { 
    } 

    [DataMember] 
    public int UnpartialTotalCount { get; set; } 

을 그리고 여기에 동일한 방법으로 실패한 내 두 번째 시도이다 : 거래는 여기에 무엇

[Serializable] 
public class PartialList<T> : List<T>, ISerializable 
{ 
    public PartialList() 
    { 

    } 

    public PartialList(IEnumerable<T> collection) 
     : base(collection) 
    { 
    } 

    [DataMember] 
    public int UnpartialTotalCount { get; set; } 

    protected PartialList(SerializationInfo info, StreamingContext context) 
    { 
     UnpartialTotalCount = info.GetInt32("UnpartialTotalCount"); 
    } 

    public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     info.AddValue("UnpartialTotalCount", UnpartialTotalCount); 
    } 

} 

은?

답변

0

this question에 따르면, 이것은 "설계"입니다. 다른 사람이이 주제를 발견 그냥 경우

0

WCF의 경우 ISerializable 인터페이스 대신 클래스에 [DataContract] 특성을 사용하려고합니다. WCF는 다른 형식의 serialization을 사용하며, serialize해야하는 클래스 및 멤버를 표시하기위한 다른 규칙을 사용합니다.

WCF는 [Serializable] 또는 ISerializable을 지원하지만 [DataContract]/[DataMember]/등을 사용하는 것이 좋습니다. WCF의 국제 대회.

+0

'[DataContract]'속성은 런타임 오류로 인해 부적절한 콜렉션이 발생합니다. 정확한 오류가 있지만 이미 시도했습니다. – Jaxidian

2

:-(, <DataContract>는 해당 회원.

대신 <CollectionDataContract>를 사용해야합니다. 카나 유사한 네임 스페이스 사용자 지정 컬렉션 유형에 대해 유효하지 않습니다, 그러나 처리 할 수있다 자세한 내용은이 기사의 "사용자 정의 모음"을 참조하십시오. http://msdn.microsoft.com/en-us/library/aa347850.aspx

관련 문제