【发布时间】:2016-01-30 23:11:51
【问题描述】:
我可能有一个奇怪的用例,如果我的问题可以通过其他方式解决,我也会非常感激。
我有一个应用程序,它侦听传入事件(json 消息)并根据消息类型调用一些代码。它看起来像这样:
_queue.Subscribe(message =>
{
var obj = JsonConvert.DeserializeObject<T>(message, _serializationSettings);
lock (this)
{
var type = obj.GetType();
typeof(IEventStorage)
.GetMethod(nameof(IEventStorage.ProcessEvent))
.MakeGenericMethod(type)
.Invoke(EventsStorage, new[] { obj });
}
return true;
});
这里我将传入的消息反序列化为我的应用数据类型,然后基于此类型调用ProcessEvent 方法,其签名如下所示:
void ProcessEvent<TEvent>(TEvent dto) where TEvent : IEvent;
一切都很好,直到我需要修改我的数据类型,所以现在我必须使用自定义转换器来读取传入的 json。现在,我在 DeserializeObject 中遇到了一个问题,因为 Newtonsoft json 无法理解使用转换器进行反序列化的必要性。在我的消息中,我有 $type 成员,我可以使用它来选择正确的转换器进行反序列化,但我不明白如何在转换器或合约解析器中指定它。
如果有任何帮助,我将不胜感激。
【问题讨论】:
标签: c# json serialization json.net