SignalR使用自定义类时客户端接收值为null及相关异常排查
SignalR自定义类接收值为null且抛出序列化异常的原因
以下是导致该问题的常见原因:
- 自定义类无无参数构造函数:SignalR默认使用
System.Text.Json做序列化,这个序列化器要求目标类必须有无参构造函数,否则无法创建类实例,最终所有属性值为null,同时抛出序列化相关异常。 - 属性访问修饰符非public:如果自定义类的属性是private、protected或者internal,JSON序列化器无法读写这些属性,自然得到的实例所有值都是null。
- 服务端与客户端类属性大小写不匹配:默认的JSON序列化是区分大小写的,比如服务端类属性叫
UserAge,客户端对应类的属性是userAge,就会匹配失败,导致值为null,同时触发解析异常。 - 类包含不可序列化的成员:如果自定义类里有
DateTimeOffset(未正确配置)、复杂嵌套对象(无对应序列化规则)或者未标记可序列化的特殊类型,序列化器处理不了就会抛出异常,也无法正确赋值属性。 - SignalR序列化配置错误:如果手动修改了SignalR的JSON序列化配置,比如禁用了属性映射、修改了契约解析器,会导致序列化逻辑无法正确识别类的属性,进而出现值为null和异常。
内容的提问来源于stack exchange,提问作者kerekS
相关产品推荐
相关产品推荐

