diff --git a/src/Client/Dispatcher/LspDispatcher.cs b/src/Client/Dispatcher/LspDispatcher.cs
index c4a90fc04..e2b6c546f 100644
--- a/src/Client/Dispatcher/LspDispatcher.cs
+++ b/src/Client/Dispatcher/LspDispatcher.cs
@@ -4,6 +4,7 @@
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
+using OmniSharp.Extensions.JsonRpc;
using OmniSharp.Extensions.LanguageServer.Client.Handlers;
namespace OmniSharp.Extensions.LanguageServer.Client.Dispatcher
@@ -21,10 +22,22 @@ public class LspDispatcher
///
/// Create a new .
///
- public LspDispatcher()
+ ///
+ /// The JSON serialiser for notification / request / response payloads.
+ ///
+ public LspDispatcher(ISerializer serializer)
{
+ if (serializer == null)
+ throw new ArgumentNullException(nameof(serializer));
+
+ Serializer = serializer;
}
+ ///
+ /// The JSON serialiser to use for notification / request / response payloads.
+ ///
+ public ISerializer Serializer { get; set; }
+
///
/// Register a handler invoker.
///
@@ -92,7 +105,9 @@ public async Task TryHandleNotification(string method, JObject notificatio
if (_handlers.TryGetValue(method, out IHandler handler) && handler is IInvokeNotificationHandler notificationHandler)
{
- await notificationHandler.Invoke(notification);
+ object notificationPayload = DeserializePayload(notificationHandler.PayloadType, notification);
+
+ await notificationHandler.Invoke(notificationPayload);
return true;
}
@@ -121,9 +136,36 @@ public Task