문제

에서 protobuf-net 구현, 무엇을합니까 프로토 로이클 속성은 의미하며 무엇을합니까?

예를 들어 감사하겠습니다.

나는 그것을 보았다 이 게시물에서 그리고 그것이 무엇을하는지 잘 모르겠습니다. 예제는 다음과 같습니다.

[Serializable,
 ProtoContract,
 ProtoInclude(50, typeof(BeginRequest))]
abstract internal class BaseMessage
{
  [ProtoMember(1)]
  abstract public UInt16 messageType { get; }
}

[Serializable,
 ProtoContract]
internal class BeginRequest : BaseMessage
{
    [ProtoMember(1)]
    public override UInt16 messageType
    {
        get { return 1; }
    }
}

또한, 프로토겐 도구?

도움이 되었습니까?

해결책

죄송합니다, 나는 이것을 놓치려고하지 않았다 - 아아, 나는 모든 것을 보지 못한다.

문제의 세부 사항을 감안할 때, 나는 당신이 적어도 .proto에 익숙하다고 생각할 것입니다. 내가 틀렸다면 나를 수정하십시오.

[ProtoInclude] 많이 작동합니다 [XmlInclude] ~을 위한 XmlSerializer - 또는 [KnownType] ~을 위한 DataContractSerializer - (DE) 직렬화 중 유형의 서브 클래스를 인식 할 수 있습니다. 유일한 추가 사항은 각 하위 유형을 식별하기 위해 태그 (번호)가 필요하다는 것입니다 (고유해야하며 부모 유형의 필드와 충돌하지 않아야합니다).

재 양성자 : 아니요; 기본 사양 (Google의)은 상속을위한 조항을 제공하지 않습니다. 조금도, 따라서 Protogen (.Proto를 통해)은 이것을 표현하는 메커니즘이 없습니다. Protobuf-Net은 상속 지원을 제공합니다 확대, 그러나 메시지를 다른 구현과 전선에 적합하게 남겨 두는 방식으로 수행합니다. 밀고, 아마도 Google 사양의 새로운 확장 속성을 통해 Protogen 지원을 추가 할 수는 있지만 아직이 작업을 수행하지 않았습니다.

그래서; 예를 보려면; 그것은 사이의 상속 관계를 표현합니다 BaseMessage 그리고 BeginRequest; 당신이하는지에 관계없이 :

Serialize<BaseMessage>(...)
Serialize<BeginRequest>(...)
  • 어느 쪽이든, 그것은베이스에서 시작됩니다 (BaseMessage)) 그리고 위쪽으로 일한다. 그렇지 않습니다 바로 그거죠 사실 - 그것은 씁니다 데이터 로 시작 BeginRequest (그래서 우리가 있다는 것을 알고 있습니다 BeginRequest 사막화 중에 가능한 빨리). 중요한 것은 부모 계약 유형의 필드가 포함되어 있고 시리얼 라이저는 실제 물체가 통과되었습니다 - 유형뿐만 아니라 말하다 그것은이다.

마찬가지로, 사용 여부에 관계없이 Deserilaization 동안 :

Deserialize<BaseMessage>(...)
Deserialize<BeginRequest>(...)

실제로 직렬화 된 유형을 얻을 수 있습니다 (아마도 BeginRequest).

보닛 하에서, 호환성 목적 (넓은 프로토콜 버퍼 사양)을 위해 이것은 (오류를 용서하십시오. 내 .proto는 녹슬 었음) : 다음과 같습니다.

message BaseMessage {
    optional BeginRequest beginRequest = 50;
    optional uint32 messageType = 1;   
}
message BeginRequest {        
}

(재정의는 아마도 지정해서는 안됩니다 [ProtoMember], btw.

일반적으로 오름차순 태그 순서로 필드를 작성하지만 효율적인 사막화를 위해 엔진은 하위 클래스 데이터를 작성하기로 선택합니다. 첫 번째 (사양에 의해 명시 적으로 허용됨) - 즉, 그것은 같은 것을 씁니다 (당신은 이진을 상상해야합니다 ...) :

[tag 50, string][length of sub-message][body of sub-message][tag 1, int][value]

(이 경우 하위 메시지의 본문이 비어 있습니다)

그게 다루나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top