我正在使用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
当我将对象发送到服务器时,它会到达那里,但是成员显示为类型A,当它应该是b类型B. 我在客户端和服务器端使用TraceWriter日志。 JSON中的$ type attirubte显示对象类型为B
答案 0 :(得分:1)
那是因为member
是 A
(类定义是这样说的)。您可以在B
放置B
,因为A
可以隐式转换为A
(因为它继承了A
),但内容不会更改其类型(这将永远是IEnumerable<int> temp = new List<int>();
IEnumerable<int> temp2 = new HashSet<int>();
)。
当我们使用这样的泛型集合时会发生这种情况:
temp
temp2
和IEnumerable<int>
都是List<>
,无论我们分配给他们(HashSet<>
和IEnumerable<>
实施member
)。< / p>
为了使B
被识别为{{1}}类型,您必须将其强制转换。