从客户端到服务器的SignalR发送对象未正确反序列化

时间:2014-03-05 09:44:46

标签: c# json signalr

我正在使用signalR 2.0.2

我的客户端有一个对象

 Class A {}
 Class B : A {}
 Class C : { public A member {get;set;}

 C obj = new C();
 obj.member = new B();

在客户端和服务器中,我在TypeNameHandling = TypeNameHandling.Auto

之后都有相同的json序列化程序选项

当我将对象发送到服务器时,它会到达那里,但是成员显示为类型A,当它应该是b类型B. 我在客户端和服务器端使用TraceWriter日志。 JSON中的$ type attirubte显示对象类型为B

1 个答案:

答案 0 :(得分:1)

那是因为member A(类定义是这样说的)。您可以在B放置B,因为A可以隐式转换为A(因为它继承了A),但内容不会更改其类型(这将永远是IEnumerable<int> temp = new List<int>(); IEnumerable<int> temp2 = new HashSet<int>(); )。

当我们使用这样的泛型集合时会发生这种情况:

temp

temp2IEnumerable<int>都是List<>,无论我们分配给他们(HashSet<>IEnumerable<>实施member)。< / p>

为了使B被识别为{{1}}类型,您必须将其强制转换。