我们正在使用 Bson 在 RabbitMq Rpc 客户端服务器调用的任一侧进行序列化/反序列化。我们已经按照这里的建议实现了我们的 SimpleRpcClient/Server:
然而,我们的 Subscription 对象是这样实现的:
public class SubscriberRequest<TKey> : SubscriberRequest
{
public TKey[] Keys { get; set; }
public SubscriberRequest(){}
public SubscriberRequest(IEnumerable<TKey> keys) : base()
{
this.Keys = keys.ToArray();
this.Hostname = Dns.GetHostName();
}
}
public class SubscriberRequest
{
public static SubscriberRequest Default = new SubscriberRequest() { Hostname = Dns.GetHostName() };
public string Hostname { get; set; }
}
允许我们以类型化的方式来回发送请求响应对象。当我们的序列化程序只负责处理一种类型的“请求”对象时,这似乎工作得很好。
BsonClassMap.LookupClassMap(typeof(SubscriberRequest<MessageType1Request>));
但是,当我们尝试将序列化器用于多种类型的请求对象时,我似乎无法设置足以满足反序列化器的 ClassMap。
BsonClassMap.LookupClassMap(typeof(SubscriberRequest<MessageType1Request>));
BsonClassMap.LookupClassMap(typeof(SubscriberRequest<MessageType2Request>));
我一直得到一个 MongoDB.Bson.BsonSerializationException: Ambiguous discriminator 'SubscriberRequest`1'
我试图明确告诉 BsonClassMap 如何处理这个问题:
BsonClassMap.RegisterClassMap<SubscriberRequest<MessageType1Request>>(cm =>
{
cm.MapCreator(p => new SubscriberRequest<MessageType1Request>(p.Keys));
});
无济于事。
我怎样才能正确地满足鉴别器?