【发布时间】:2013-11-08 21:50:48
【问题描述】:
我们正在使用 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));
});
无济于事。
如何正确满足判别器?
【问题讨论】:
-
这个问题有什么解决办法吗?
标签: c# serialization rabbitmq mongodb-.net-driver bson