Ang*_*ker 19 javascript c# json signalr
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;}
}
Run Code Online (Sandbox Code Playgroud)
在.NET中,我可以引用这样的值:master.QuarterHours[2].Minute.Registered
.我的问题:
master.QuarterHours[2].Minute.Registered
在Javascript端接收方法中引用?Master
在Javascript中构建对象以发送到.NET端?N. *_*len 22
Run Code Online (Sandbox Code Playgroud){ QuarterHours: [{ Minute: { Registered: true, NumAttendees: 1337 }, HourStart: 1 }], Books: ["Game of Thrones", "Harry Potter"], EndDay: 2, StartDay: 3 }
您可能希望将类序列化为JSON对象.有很多方法可以实现这一点,但您可以尝试使用JSON.NET快速轻松地完成此任务.
如果它尚未包含在您的项目中,您可以通过Nuget添加:
Install-Package Newtonsoft.Json
Run Code Online (Sandbox Code Playgroud)
代码看起来像:
var json = JsonConvert.SerializeObject(master);
Run Code Online (Sandbox Code Playgroud)
一旦将其传递给客户端,您就可以像对待任何其他对象一样从JSON对象中读取.您可以使用以下javascript代码将SignalR字符串消息转换为JSON对象:
var master = JSON.stringify(eval("(" + message + ")"));
var registered = master.QuarterHours[2].Minute.Registered;
Run Code Online (Sandbox Code Playgroud)
您还可以通过SignalR将其传递给服务器,并使用JsonConvert.DeserializeObject反序列化JSON对象,以便将其转换为C#类.查看此处的文档以获取更多详细信息:http://james.newtonking.com/projects/json/help/