2013-06-27 2 views
16

Esiste un eccellente tutorial su SignalR che spiega come passare oggetti .NET come parametri su Javascript e viceversa. In tal caso passa un oggetto ChatMessage da e verso.Come passare oggetti complessi tramite SignalR?

Tuttavia, il tutorial si rivolge a un oggetto molto semplice. Mi piacerebbe vedere come gestire gli oggetti .NET complessi (che hanno altri oggetti come proprietà) in Javascript.

Ad esempio, si consideri il seguente oggetto:

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;} 
} 

In NET, posso fare riferimento a un valore simile: master.QuarterHours[2].Minute.Registered. Le mie domande:

  1. Come farei riferimento master.QuarterHours[2].Minute.Registered nel metodo ricevitore sul Javascript fine?
  2. Come creare l'oggetto Master in Javascript da inviare al terminale .NET?
+0

Sarebbe serializzato e convertito in un oggetto JSON, proprio come si farebbe con un 'JsonResult' da un'azione. –

+1

inoltre non dimenticare di rendere le tue lezioni ** pubbliche ** !! –

risposta

17
  1. Basta inviarlo e fare riferimento allo stesso modo.
  2. Si potrebbe passare (questo è come appare quando lo si ottiene dal server):
{ 
    QuarterHours: [{ 
     Minute: { 
      Registered: true, 
      NumAttendees: 1337 
     }, 
     HourStart: 1 
    }], 
    Books: ["Game of Thrones", "Harry Potter"], 
    EndDay: 2, 
    StartDay: 3 
} 
10

Si consiglia di serializzare la classe in un oggetto JSON. Ci sono molti modi per farlo, ma puoi provare JSON.NET per farlo in modo facile e veloce.

Se proprio non già inclusi nel progetto, è possibile aggiungere questo attraverso Nuget con:

Install-Package Newtonsoft.Json 

Il codice potrebbe essere simile:

var json = JsonConvert.SerializeObject(master); 

Una volta che questo viene passato al client- lato, puoi quindi leggere dal tuo oggetto JSON come qualsiasi altro. È possibile utilizzare il seguente codice javascript per convertire il messaggio stringa SignalR a un oggetto JSON:

var master = JSON.stringify(eval("(" + message + ")")); 
var registered = master.QuarterHours[2].Minute.Registered; 

È inoltre possibile passare questo attraverso SignalR al server e deserializzare l'oggetto JSON utilizzando JsonConvert.DeserializeObject al fine di convertirlo in le tue classi C#. Controlla la documentazione qui per ulteriori dettagli: http://james.newtonking.com/projects/json/help/

+0

Perché questo downgoted era così alto> – user1477388

+0

la domanda era su come passare oggetti complessi su singalR, non su come serializzare gli oggetti. –

+11

... e una soluzione è la serializzazione di oggetti in JSON. –