/// <summary> /// Deserialize the JSON stream into a .Net object. /// For .Net Core/.Net 5.0 uses System.Text.Json /// for .Net 4.5.2 uses System.Runtime.Serialization.Json /// </summary> /// <typeparam name="T">Object type</typeparam> /// <param name="eventName">event Name</param> /// <param name="stream">JSON stream</param> /// <returns>object of type <typeparamref name="T"/></returns> private static T DeserializeJsonEvent <T>(string eventName, Stream stream) where T : EventArgs { if (typeof(T) == typeof(EventArgs)) { return((T)EventArgs.Empty); } if (typeof(T) == typeof(DevToolsEventArgs)) { var paramsAsJsonString = StreamToString(stream, leaveOpen: true); var args = new DevToolsEventArgs(eventName, paramsAsJsonString); return((T)(object)args); } return((T)DeserializeJson(typeof(T), stream)); }
/// <inheritdoc/> public IRegistration RegisterEventHandler <T>(string eventName, EventHandler <T> eventHandler) where T : DevToolsDomainEventArgsBase { EventHandler <Stream> handler = (sender, stream) => { stream.Position = 0; if (typeof(T) == typeof(DevToolsEventArgs) || typeof(T) == typeof(DevToolsDomainEventArgsBase)) { var paramsAsJsonString = StreamToString(stream, leaveOpen: true); var args = new DevToolsEventArgs(eventName, paramsAsJsonString); eventHandler(sender, (T)(object)args); } else { eventHandler(sender, DeserializeJson <T>(stream)); } }; eventHandlers.AddOrUpdate(eventName, _ => handler, (_, existingHandler) => existingHandler += handler); return(new DevToolsEventHandlerRegistration(eventName, handler, eventHandlers)); }