2010-08-19 5 views
1

이 질문은 protobuf-net 관리자에게 직접 문의해야하지만 다른 누구도 언급하지 마십시오.protobuf-net 및 인터페이스 지원

[DataContract]  
public class SampleDataClass 
{ 
    [DataMember(Order=1)] 
    public int Field1 { get; set; }     

    [DataMember(Order = 2)]   
    public IPayload Payload { get; set; } 
} 

[ProtoContract] 
[ProtoInclude(1, typeof(Payload))] 
public interface IPayload 
{ 
    int Field4 { get; set; } 
} 

[DataContract] 
public class Payload : IPayload 
{ 
    [DataMember(Order = 1)] 
    public int Field4 { get; set; } 
} 

나는이 protobuf - 그물의 V1의 소스를 변경하여 작동하도록 관리해야 :

나는 인터페이스 유형이 속성을 포함하는 클래스, 예를 직렬화하려고했다. ProtoInclude가 인터페이스에 정의되어있는 한이 접근법에 어떤 문제도 보지 못했습니다.

분명히 이것을 컴파일하려면 ProtoContract와 ProtoInclude를 인터페이스에 장식 할 수 있어야하고 거기에 몇 가지 다른 변경 사항을 추가해야합니다. (참고로 DataContract/KnownType을 사용했지만이 속성도 인터페이스에 장식 할 수 없음)

가능한 단점에 대해 의견을 제시해 주시겠습니까?

+0

V2의 표준 기능으로 사용할 수 있습니다를 취할 것 v2 트렁크에 최선을 다합니다. btw –

답변

2

내가 볼 수있는 주요 결함은 페이로드 측면에서 데이터를 하위 메시지로 이동한다는 것입니다. v2에서 비슷한 디자인을 사용하여이 문제를 해결하고 기본 메시지에서 대부분의 값을 유지합니다. 정당한 이유로, 필자는이 변경에 대해 주로 v2를 염두에 두었습니다 (두 가지 구현이 분리되고 v2가 훨씬 나은 유형 모델을 가짐).

그러나 두 가지 사용 모드를 모두 지원할 수 있어야합니다. 당신이 (동일한 라이센스 등 포함) V1에 대한 패치로 보내려면 내가 행복하게보고 :


이이 그냥왔다

+0

'데이터를 하위 메시지로 옮김'이라는 의미를 자세히 설명해 주실 수 있습니까? 인터페이스가 객체 계층 구조에서 멀리 아래쪽으로 중첩 된 상태에서 성능 (성능 또는 기타) 문제가 있습니까? – wal

+0

@wal - 간단히 말해, (특별한 표기법을 사용하지 않고, 명확하게하기 위해'Field4' 태그를 5로 변경하는 것)'{1 = {len : 5 = value}}'. 우리는 serialization이 * 인터페이스 *에있을 수 있다는 것을 지원해야한다는 것을 (그러나 위임 할 필요는 없다) 생각해야한다. 그래서 우리는 여전히 * 구체적인 *을 가지고있는 {{1 = {0}, 5 = value} 하위 유형이지만 ** 특정 추가 데이터를 노출하지 않는 한 인터페이스 수준에서 직렬화합니다. –

+0

v2에서 이미 지원합니까? – mark