기본 클래스의 하위 유형을 지정하지 직렬화에, 내가 수행해야합니다.protobuf - 순 나는 이와 같은 상속 체인을 가지고
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<PayloadType>));
나는 대답은 이런 종류의 (위의 라인을) 알고 꽤 StackOverflow의 게시물에 기록 된 다음 내가 필요하기 때문에 그러나, 나는이 디자인을 좋아하지 않는다 모든 하위 유형을 미리 선언하고 제한된 소수의 su를 의미합니다. btypes.
응용 프로그램에서 serialization/deserialization에 protobuf-net을 사용하여 메시지 버스를 코딩하려고합니다. 메시지 버스는 '이벤트'를 보내고 요청/응답에 응답해야합니다. 내 시스템에 많은 (쉽게> 100) 이벤트가 있기 때문에 RuntimeTypeModel에서 모든 닫힌 제네릭 형식에 대한 하위 형식을 선언하고 싶지 않습니다.
protobuf-net은 하위 유형/클래스를 추론 할 수 있습니까? 또는 이상적으로는 다음과 같은 것을 사용하고 싶습니다.
RuntimeTypeModel.Default[typeof(Packet)].AddSubType(3, typeof(Message<>));
(어느 것이고 작동하지 않습니다).
빠른 알림을 보내 주신 Marc에게 감사드립니다. 그것이 내가 원하는 바가 아니지만, 그 형식이 유선 형식에 포함되어 있지 않다는 것을 이해합니다. 내 문제를 해결하기 위해 자동 등록을 할 것입니다 : 기본 클래스에서 상속 한 모든 유형에 대해 현재 AppDomain에서로드 된 어셈블리를 검사합니다. 키에 대해서는 항상 해시 코드를 사용할 수 있습니다. System.Type.Name. 이 게시물과 유사 : http://stackoverflow.com/questions/6702172/protobuf-net-v2-type-meta. – pdalbe01
@ pdalbe01 그냥 각 유형에 대해 동일한 키를 가져올 수 있는지 확인하십시오. 이는 중요합니다. 반사는 사물이 발견되는 순서에 대해 거의 보장하지 않습니다. "알파벳"의 "명백한"선택은 사람들이 클래스를 추가/제거/이름을 변경함에 따라 까다로울 수 있으므로 키 번호를 각 유형과 어떻게 안정적으로 연관시키는 지 생각하는 것이 중요합니다. 파생 된 유형 *의 속성 *이 작업을 수행 할 수 있습니다. –