有一个关于SignalR的优秀教程,解释了如何将.NET对象作为参数传递给Javascript,反之亦然。在这种情况下,它会传递一个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;}
}
在.NET中,我可以引用这样的值:master.QuarterHours[2].Minute.Registered
。我的问题:
master.QuarterHours[2].Minute.Registered
?Master
对象以发送到.NET端?答案 0 :(得分:21)
{ QuarterHours: [{ Minute: { Registered: true, NumAttendees: 1337 }, HourStart: 1 }], Books: ["Game of Thrones", "Harry Potter"], EndDay: 2, StartDay: 3 }
答案 1 :(得分:8)
您希望将类序列化为JSON对象。有很多方法可以实现这一目标,但您可以尝试JSON.NET快速轻松地完成此任务。
如果它尚未包含在您的项目中,您可以通过Nuget添加:
Install-Package Newtonsoft.Json
代码看起来像:
var json = JsonConvert.SerializeObject(master);
一旦将其传递到客户端,您就可以像其他任何一样从JSON对象中读取。您可以使用以下javascript代码将SignalR字符串消息转换为JSON对象:
var master = JSON.stringify(eval("(" + message + ")"));
var registered = master.QuarterHours[2].Minute.Registered;
您也可以通过SignalR将其传递给服务器,并使用JsonConvert.DeserializeObject反序列化JSON对象,以便将其转换为您的C#类。请查看此处的文档以获取更多详细信息:http://james.newtonking.com/projects/json/help/