C# 如何通过信号器传递复杂对象?
有一个很好的教程解释了如何将.NET对象作为参数传递给Javascript,反之亦然。在这种情况下,它将一个C# 如何通过信号器传递复杂对象?,c#,javascript,json,signalr,C#,Javascript,Json,Signalr,有一个很好的教程解释了如何将.NET对象作为参数传递给Javascript,反之亦然。在这种情况下,它将一个ChatMessage对象传入和传出 但是,本教程介绍了一个非常简单的对象。我想看看如何在Javascript中处理复杂的.NET对象(将其他对象作为属性) 例如,考虑以下对象: class Master { public List<QuarterHour> QuarterHours { get; set; } public List<string>
ChatMessage
对象传入和传出
但是,本教程介绍了一个非常简单的对象。我想看看如何在Javascript中处理复杂的.NET对象(将其他对象作为属性)
例如,考虑以下对象:
class Master {
public List<QuarterHour> QuarterHours { get; set; }
public List<string> Books { get; set; }
public int EndDay { get; set; }
public int StartDay { get; set; }
}
class QuarterHour {
public MinuteInstance Minute {get; set;}
public int HourStart { get; set;}
}
class MinuteInstance {
public bool Registered {get; set;}
public int NumAttendees {get; set;}
}
类主控{
公共列表{get;set;}
公共列表书籍{get;set;}
public int EndDay{get;set;}
公共int开始日期{get;set;}
}
每四分之一小时上课{
公共分钟持续分钟{get;set;}
公共整数小时开始{get;set;}
}
类分钟持续时间{
公共bool注册{get;set;}
公共整数NumAttendees{get;set;}
}
在.NET中,我可以引用如下值:master.QuarterHours[2].Minute.Registered
。我的问题是:
master.QuarterHours[2].Minute.Registered
Master
对象以发送到.NET端您可能希望将类序列化为JSON对象。有很多方法可以做到这一点,但是你可以尝试快速简单地做到 如果尚未包含在项目中,则可以通过Nuget通过以下方式添加:
Install-Package Newtonsoft.Json
代码将类似于:
var json = JsonConvert.SerializeObject(master);
一旦将其传递到客户端,您就可以像读取其他对象一样读取JSON对象。您可以使用以下javascript代码将信号器字符串消息转换为JSON对象:
var master = JSON.stringify(eval("(" + message + ")"));
var registered = master.QuarterHours[2].Minute.Registered;
您还可以通过signar将此消息传递给服务器,并使用JsonConvert.DeserializeObject反序列化JSON对象,以便将其转换为C#类。查看此处的文档了解更多详细信息:它将被序列化并转换为JSON对象,就像您将从操作中使用
JsonResult
一样。另外,不要忘记将类公开!!问题在于如何将复杂对象传递给singalR,而不是如何序列化对象……一种解决方案是将对象序列化为JSON。如果有一种本地方式发送复杂对象(如另一个答案所述),那么使用序列化并不是一个真正的“好”解决方案,但是一个解决方法——特别是因为似乎序列化是Signal内部所做的。。所以基本上你是在重写库的一部分,我只是用信号器发送了一个.NET对象。客户端js接收相同结构中的js对象。我根本不需要序列化它。确保这些属性是公共的!您不需要在信号器中手动序列化对象。它已经在signarlibi中实现,只是将我的有效负载从一个(简单的)复杂类型更改为一个(简单的)复杂类型,它不再工作,hub中的Send方法不再像以前那样被调用。没有错误,什么都没有。你有什么想法吗?公共异步任务SendCommonMessage(CommonMessage CommonMessage)
var master = JSON.stringify(eval("(" + message + ")"));
var registered = master.QuarterHours[2].Minute.Registered;