在我的ASP.NET核心Web应用程序上,我使用SignalR为我的Angular 应用程序提供一些实时更新。
public class DataBatch
{
public Guid DashboardId { get;set; }
public IEnumerable<WidgetData> WidgetData { get;set; }
public DateTime RefreshDate { get;set; }
}
public abstract class WidgetData
{
public Guid WidgetUsageId { get; set;}
public DateTime Timestamp { get; set;}
}
问题是WidgetData
是抽象的,它的大多数实现都有附加值。通常:
public class ValueIndicatorData : WidgetData
{
public IList<ValueIndicatorValue> ValueIndicatorValues { get; } = new List<ValueIndicatorValue>();
}
当我将数据发送给客户时:
await _hubContext.Clients.Group(dashboardId).SendDashboardData(notification.DataBatch);
我的客户端只接收在WidgetData
中声明的属性,而不是我的子类之一(如ValueIndicatorData)。
我如何向SignalR提供该对象具有子类以及其属性应被序列化的信息?
1条答案
按热度按时间628mspwn1#
我结束了将Asp.NetCore配置为使用NewtonSoft序列化为JSON的过程,同时设置了一个包含类型的选项,现在它会自动序列化数据:
有一种使用原生JSON转换器的替代方法,但它需要构建一些繁琐的转换器:
https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to?pivots=dotnet-6-0#support-polymorphic-deserialization