c# - mvc - signalr vs websockets




¿Cómo pasar objetos complejos a través de SignalR? (2)

Hay un excelente tutorial en SignalR que explica cómo pasar objetos .NET como parámetros a Javascript y viceversa. En ese caso, pasa un objeto ChatMessage desde y hacia.

Sin embargo, el tutorial aborda un objeto realmente simple. Me gustaría ver cómo tratar con objetos .NET complejos (que tienen otros objetos como propiedades) en Javascript.

Por ejemplo, considere el siguiente objeto:

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

En .NET, puedo hacer referencia a un valor como este: master.QuarterHours[2].Minute.Registered . Mis preguntas:

  1. ¿Cómo haría referencia master.QuarterHours[2].Minute.Registered en el método del receptor en el extremo de Javascript?
  2. ¿Cómo compilaría el objeto Master en Javascript para enviarlo al final de .NET?

  1. Simplemente envíalo y haz referencia de la misma manera.
  2. Pasarías (así es como se ve cuando lo obtienes del servidor):
{
    QuarterHours: [{
        Minute: {
            Registered: true,
            NumAttendees: 1337
        },
        HourStart: 1
    }],
    Books: ["Game of Thrones", "Harry Potter"],
    EndDay: 2,
    StartDay: 3
}

Usted querría serializar su clase en un objeto JSON. Hay muchas maneras de lograr esto, pero puede intentar JSON.NET para hacerlo de manera rápida y fácil.

Si aún no está incluido en su proyecto, puede agregarlo a través de Nuget con:

Install-Package Newtonsoft.Json 

El código se vería algo así como:

var json = JsonConvert.SerializeObject(master);

Una vez que esto se pasa a su lado del cliente, puede leer su objeto JSON como cualquier otro. Puede usar el siguiente código javascript para convertir su mensaje de cadena SignalR en un objeto JSON:

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

También puede pasar esto a través de SignalR al servidor y deserializar el objeto JSON utilizando JsonConvert.DeserializeObject para convertirlo a sus clases de C #. Consulte la documentación aquí para obtener más detalles: http://james.newtonking.com/projects/json/help/





signalr