2014-03-05 38 views
2

我想序列派生類型的解釋here但signalR 我想要實現從JsonConverter導出我的自定義轉換器signalR和CustomTypeConverter

我把它添加到signalR作爲folows

var serializer = GlobalHost.DependencyResolver.GetService(typeof(JsonSerializer)) as JsonSerializer; 
var i = new CustomTypeConverter(); 
serializer.Converters.Add(i); 
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer); 

什麼我應該在public override bool CanConvert(Type objectType) 處理類型,當我調試此功能時,我看不到我認爲是我的解決方案的一部分的類型

+0

?如果它作爲參數傳遞給客戶端中心方法,則您要查找的類型可能是ClientHubInvocation。您的類型的對象將在「Args」數組中。 http://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hubs.clienthubinvocation(v=vs.118).aspx – halter73

+0

我沒有看到trasport行上的ClientHubInvocation,我看到HubInvocation,我不能因爲它是一個私人課程。我也看到ClientHubInfo,HubInvocation –

+0

HubInvocation類正在被反序列化,而不是序列化。你是否想要反序列化或序列化你的類型?或兩者?如果你仍然試圖序列化,你可能需要查找ConnectionMessage而不是ClientHubInvocation。 ConnectionMessage.Value將包含您的ClientHubInvocation。 – halter73

回答

7

這一直在駕駛我堅持了幾個小時。感謝halter73的評論,我能夠在我的特殊情況下提出解決問題的方法:我需要管道爲我創建接口實例,而這些接口實例並不適用於開箱即用。 因此,解決辦法是如下:

class CustomResolver : Microsoft.AspNet.SignalR.Hubs.DefaultParameterResolver 
{ 
    public override object ResolveParameter(Microsoft.AspNet.SignalR.Hubs.ParameterDescriptor descriptor, Microsoft.AspNet.SignalR.Json.IJsonValue value) 
    { 
     if(descriptor.ParameterType.IsInterface) 
     { 
      object TargetObject = <Create the object instance here> 
      return value.ConvertTo(TargetObject.GetType()); 
     } 
     else 
     { 
      return value.ConvertTo(descriptor.ParameterType); 
     } 
    } 
} 

你叫

WebApp.Start() 

註冊這個新的參數解析與當時前:你如何使用你試圖序列類型

GlobalHost.DependencyResolver.Register(typeof(Microsoft.AspNet.SignalR.Hubs.IParameterResolver),() => new CustomResolver()); 
+0

謝謝你。我使用了許多不可變類型的服務器端,儘管有JSON.Net高興反序列化它們(並且讓SignalR/WebAPI使用JSON.Net),但我無法讓SignalR調用我的JSON.Net合約解析器。我從你的回答中看到,創建一個參數解析器是將我的代碼放到SignalR中以使其工作的適當方式。謝謝!! :) –