Il existe un excellent tutoriel sur SignalR qui explique comment passer des objets .NET en tant que paramètres à Javascript et vice versa. Dans ce cas, il passe un objet ChatMessage
vers et depuis.
Cependant, le didacticiel traite d'un objet vraiment simple. J'aimerais voir comment gérer des objets .NET complexes (qui ont d'autres objets comme propriétés) en Javascript.
Par exemple, considérez l'objet suivant:
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;}
}
Dans .NET, je peux référencer une valeur comme celle-ci: master.QuarterHours[2].Minute.Registered
. Mes questions:
master.QuarterHours[2].Minute.Registered
dans la méthode du récepteur à l'extrémité Javascript?Master
en Javascript pour être envoyé à la fin .NET?{ QuarterHours: [{ Minute: { Registered: true, NumAttendees: 1337 }, HourStart: 1 }], Books: ["Game of Thrones", "Harry Potter"], EndDay: 2, StartDay: 3 }
Vous souhaitez sérialiser votre classe en un objet JSON. Il existe de nombreuses façons d'y parvenir, mais vous pouvez essayer JSON.NET pour le faire rapidement et facilement.
Si ce n'est pas déjà inclus dans votre projet, vous pouvez l'ajouter via Nuget avec:
Install-Package Newtonsoft.Json
Le code ressemblerait à quelque chose comme:
var json = JsonConvert.SerializeObject(master);
Une fois que cela est passé à votre côté client, vous pouvez alors lire à partir de votre objet JSON comme n'importe quel autre. Vous pouvez utiliser le code javascript suivant pour convertir votre message de chaîne SignalR en objet JSON:
var master = JSON.stringify(eval("(" + message + ")"));
var registered = master.QuarterHours[2].Minute.Registered;
Vous pouvez également transmettre cela via SignalR au serveur et désérialiser l'objet JSON à l'aide de JsonConvert.DeserializeObject afin de le convertir en vos classes C #. Consultez la documentation ici pour plus de détails: http://james.newtonking.com/projects/json/help/