我正在嘗試集成protobuf-net和mediatR。 這個想法是有一個單一的端點,有效載荷將到達。 然後,我應該反序列化請求消息並將其交給mediatR,然後應該根據Request消息類型轉而解析爲適當的Handler。使用protobuf-net進行序列化/反序列化時丟失的泛型類型信息
每個請求都從IRequest繼承。 有一個Result Base類和很多從它繼承的具體類。 像:
[ProtoContract]
[ProtoInclude(10, typeof(CreateUserRequest))]
[ProtoInclude(11, typeof(DeleteUserRequest))]
[ProtoInclude(12, typeof(GetUserRequest))]
[ProtoInclude(13, typeof(UpdateUserRequest))]
[ProtoInclude(14, typeof(IRequest))]
[ProtoInclude(19, typeof(IRequest<Response>))]
[ProtoInclude(20, typeof(IRequest<CreateUserResponse>))]
[ProtoInclude(21, typeof(IRequest<DeleteUserResponse>))]
[ProtoInclude(22, typeof(IRequest<GetUserResponse>))]
[ProtoInclude(23, typeof(IRequest<UpdateUserResponse>))]
public class Request : IRequest<Response>
{
[ProtoMember(1)]
public Guid CorrelationId { get; set; }
[ProtoMember(2)]
public string Requestor { get; set; }
}
[ProtoContract]
public class CreateUserRequest : Request, IRequest<CreateUserResponse>
{
[ProtoMember(1)]
public string UserName { get; set; }
}
public class CreateUserResponse : Response
{
[ProtoMember(1)]
public string NewUserName { get; set; }
}
的問題是,當我序列化對象與protobuf的,通用的信息丟失。 我正在做反序列化在一個地方(嘗試使用反射等)。 我無法反序列化爲IRequest類型的對象。
有沒有辦法保存關於泛型參數的信息,以便我可以反序列化我的對象是IRequest類型而不僅僅是CreateUserRequest?
當然,希望我做錯了什麼?