protobuf-netとmediatRを統合しようとしています。 考え方は、ペイロードが到着する単一のエンドポイントを持つことです。 次に、リクエストメッセージをデシリアライズし、それをmediatRに渡す必要があります。これは、リクエストメッセージタイプに基づいて適切なハンドラに解決されるべきです。protobuf-netでシリアル化/逆シリアル化中に一般的な情報が失われる
すべてのリクエストは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でオブジェクトをシリアル化するとき、一般的な情報が失われている、です。 私はちょうど1つの場所で逆シリアル化をやっています(反射などを使って試しました)。 IRequest型のオブジェクトに逆シリアル化できません。
ジェネリックパラメータについての情報を保持する方法はありますか?そのため、CreateUserRequestだけでなく、IRequestタイプになるようにオブジェクトをデシリアライズできますか?
もちろん、うまくいけば、私は間違っているのですか?