Dictionary<long, List<SpecialParam>>
オブジェクトを公開してサブスクリプション要求に応答するハブを持つWebAPIサーバーがあります。SignalRによって抽象クラスとして渡されたオブジェクトを逆シリアル化します
SpecialParam
のリストは、両方がSpecialParam
を継承タイプSpecialParamA
& SpecialParamB
の項目が含まれています。
私は、クライアント上で公開キャプチャしよう:
hubProxy.On<Dictionary<long, List<SpecialParam>>>(hubMethod, res =>
{
DoStuff();
});
DoStuff()
メソッドが呼び出されません。公開戻り値をstring
に変更し、string
値を受け取るようにプロキシを変更すると、DoStuff()
メソッドが呼び出されます。したがって、問題は、SpecialParam
アイテムの逆シリアル化にあります。
私は、サーバー側で設定しようとした:
var serializer = JsonSerializer.Create();
serializer.TypeNameHandling = TypeNameHandling.All;
var hubConfig = new HubConfiguration();
hubConfig.Resolver.Register(typeof(JsonSerializer),() => serializer);
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => serializer);
しかし、それは助けにはなりませんでした。
私はまた、クライアントに追加してみました:
HubConnection hubConnection = new HubConnection(hubPath);
hubConnection.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
hubProxy = hubConnection.CreateHubProxy(hubName);
hubProxy.JsonSerializer.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto;
そしてそれはまた助けにはなりませんでした。
他の解決策では、人々は新しいIParameterResolver
を定義しましたが、出力がハブから公開されたときではなく、サーバーがハブメソッドへの入力を受け取ったときにのみ呼び出されます。
助けてください!ここで
UPDATE
は、私はフィドラーでキャッチです:
{"$type":"Microsoft.AspNet.SignalR.Hubs.HubResponse, Microsoft.AspNet.SignalR.Core","I":"0"}
これは、サーバがクライアントに応答するものです。
UPDATE 2
私はまだ、すでにDictionary<long, List<SpecialParam>>
としてデシリアライズさ、それを受信する方法を把握しようとしています。
public static void ConfigureApp(IAppBuilder appBuilder)
{
...
var service = (JsonSerializer)GlobalHost.DependencyResolver.GetService(typeof(Newtonsoft.Json.JsonSerializer));
service.TypeNameHandling = TypeNameHandling.All;
...
}
とクライアントで期待されるタイプの除去:
hubProxy.On(hubMethod, res =>
{
DoStuff();
});
私はJSON形式の応答を取得し、私はそれをデシリアライズ: