gpt4 book ai didi

c# - 反序列化由 SignalR 作为抽象类传递的对象

转载 作者:行者123 更新时间:2023-11-30 17:38:19 26 4
gpt4 key购买 nike

我有一个 WebAPI 服务器,它有一个 Hub,它通过发布一个 Dictionary<long, List<SpecialParam>> 来回复 Subscribe 请求。对象。

列表SpecialParam包含 SpecialParamA 类型的项目& SpecialParamB两者都继承 SpecialParam .

当我尝试在客户端捕获发布时:

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 ,但它仅在服务器接收到集线器方法的输入时调用,而不是在从集线器发布输出时调用。

请帮忙!

更新

这是我用 fidler 捕获的结果:

{"$type":"Microsoft.AspNet.SignalR.Hubs.HubResponse, Microsoft.AspNet.SignalR.Core","I":"0"}

这是服务器回复客户端的内容。

更新 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 形式的响应,我反序列化了它:

var serializer = new JsonSerializer();
serializer.TypeNameHandling = TypeNameHandling.All;
JObject jObject = resp as JObject;
var specialParams = jObject.ToObject<Dictionary<long, List<SpecialParam>>>(serializer);

我仍然不知道如何让我的客户收到已经反序列化的数据。

关于c# - 反序列化由 SignalR 作为抽象类传递的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com