我是新来SignalR并做了简单的测试黑客。 我想与序列类型对象的对象阵列。 默认情况下,SignalR已配置JSon.NET串行不与类型信息提供。 而且我发现我可以在DependencyResolver通过注册一个自定义序列:
var serializer =
new EventHubJsonSerializer(
new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
TypeNameHandling = TypeNameHandling.Objects
});
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer);
然而,当我收到我的对象数组它不会解决种,代替它的是一个JSonContainer。 我可以以任何方式解决这个问题?
从中心发出的事件:
public sealed class SignalREvent
{
public string Group { get; set; }
public string EventName { get; set; }
public string TypeFullName { get; set; }
public IList<object> EventArguments { get; set; }
}
和受体必须通过铸造动态解开布尔:
public sealed class TestEventArgs : EventArgs
{
#region Public Properties
/// <summary>
/// Gets or sets a value indicating whether do not print.
/// </summary>
public bool DoNotPrint { get; set; }
/// <summary>
/// Gets or sets the event name.
/// </summary>
public string EventName { get; set; }
#endregion
}
this.subscription = this.client.On<SignalREvent>(
"PushEvent",
data =>
{
dynamic eventArg1 = data.EventArguments[0];
if (eventArg1.DoNotPrint.Value)
{
return;
}
});
我做了什么是postsharp方面,以便让他们通过我的EventHub通过SignalR传播上的事件适用。 例如:
[ExternalizeEvent]
public event ASimpleDelegate SimpleEvent;
这是一个混账简单的方面,但它真的是好有型信息时,在.NET世界 - 其他客户当然会不是受益。
更新
这是我的JSon.NET配置输出 - 类型在$式传播,但它似乎没有deseralization期间使用。
{
"$id": "11",
"$type": "<>f__AnonymousType0`3[[System.String, mscorlib],[System.String, mscorlib],[System.Object[], mscorlib]], SignalR",
"Hub": "Externalize.EventHub",
"Method": "PushEvent",
"Args": [
{
"$id": "12",
"$type": "DataDuctus.SignalR.Aspects.SignalREvent, DataDuctus.SignalR.Aspects",
"Group": "all",
"EventName": "SimpleEvent",
"TypeFullName": "TestConsole.TestEvents",
"EventArguments": [
{
"$id": "13",
"$type": "TestConsole.TestEventArgs, TestConsole",
"DoNotPrint": false,
"EventName": "second event (test)"
}
]
}
]
}
干杯,马里奥