在运行时将JObject转换为type

10 c# casting json.net get-event-store

我正在编写一个简单的事件调度程序,其中我的事件作为具有clr类型名称的对象和表示原始事件的json对象(在将byte []处理到jobject之后)被触发.如果有人想知道具体细节,我正在使用GetEventStore.

我想把那个clr类型做两件事:

  1. 找到实现IHandles和的类
  2. 在该类上调用Consume(clr类型)

我已经设法使用以下代码使第1部分正常工作:

     var processedEvent = ProcessRawEvent(@event);
     var t = Type.GetType(processedEvent.EventClrTypeName);

     var type = typeof(IHandlesEvent<>).MakeGenericType(t);

     var allHandlers = container.ResolveAll(type);


     foreach (var allHandler in allHandlers)
     {
         var method = allHandler.GetType().GetMethod("Consume", new[] { t });
         method.Invoke(allHandler, new[] { processedEvent.Data });
     }
Run Code Online (Sandbox Code Playgroud)

ATM的问题是processedEvent.Data是一个JObject - 我知道processedEvent.Data的类型,因为我已经在它上面定义了它.

如何在不对类型名称进行任何讨厌的切换的情况下将该JObject解析为类型t?

Ami*_*ich 10

用途ToObject:

var data = processedEvent.Data.ToObject(t);
Run Code Online (Sandbox Code Playgroud)

或者如果你有一个已知的类型,那么:

MyObject data = processedEvent.Data.ToObject<MyObject>();
Run Code Online (Sandbox Code Playgroud)