我正在实现一个基于SignalR的系统,它将推动客户端事件,对于消息序列化,我希望使用MessagePack。在尝试实现消息传递时,我遇到了一个问题,SignalR无法对客户机上的消息进行反序列化。
这些消息是多态的,使用Union属性描述,标准的MessagePack序列化程序在序列化和反序列化消息时没有问题,但是在信号R出现错误的情况下,它失败了。
报告的错误是 System.InvalidOperationException:无效的Union数据被检测到。
在客户端序列化时,只有在使用实际类时才能工作,如果我尝试使用接口或基类,则会出现错误。
类
[DataContract()] [MessagePackObject()] [Union(0,typeof(EntityChangeEventMessage))] public abstract class EntityEventMessage : IEntityEventMessage [DataContract()] [MessagePackObject()] public class EntityChangeEventMessage : EntityEventMessage #region PROPERTIES /// <summary> /// Gets entity id. /// </summary> [DataMember(Order = 1)] [Key(1)] public int EntityId get; set; /// <summary> /// Gets event type. /// </summary> /// <remarks> /// This value identifies database operation such as create,delete,update etc. /// </remarks> [DataMember(Order = 2)] [Key(2)] public int EventType get; set; /// <summary> /// Gets entity type name. /// </summary> [DataMember(Order = 3)] [Key(3)] public string EntityType get; set; #endregion