我正在尝试集成 protobuf-net 和 mediatR。这个想法是有一个有效负载将到达的端点。然后我应该反序列化请求消息并将其交给 mediatR,然后它应该根据请求消息类型解析到适当的处理程序。
每个请求都继承自 IRequest。有一个结果基类和许多从它继承的具体类。喜欢:
[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 ?
当然,希望,我做错了什么?