2013-06-27 12 views
16

SignalR'da, .NET nesnelerini Javascript'e parametreler olarak nasıl geçirileceğini ve bunun tersini açıklayan mükemmel bir eğitici var. Bu durumda, bir ChatMessage nesnesini ve buradan geçirir. Ancak, eğitici gerçekten basit bir nesneyi ele almaktadır. Javascript'te karmaşık .NET nesnelerinin (özellik olarak başka nesneler var) nasıl ele alınacağını görmek isterim.Karmaşık nesneler SignalR üzerinden nasıl geçilir?

Örneğin, aşağıdaki nesneyi göz önünde bulundurun: master.QuarterHours[2].Minute.Registered: NET'te

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

, böyle bir değere başvurabilir. Sorularım: alıcı yönteminde

    nasıl başvuru yapardı
  1. master.QuarterHours[2].Minute.Registered Javascript günü sona?
  2. .NET sonuna gönderilmek üzere Javascript'te Master nesnesini nasıl oluştururum?
+0

Bir JSON nesnesine dönüştürülecek ve bir eylemden "JsonResult" ile çalışacağınız gibi dönüştürülecektir. –

+1

da sınıflarınızı ** public ** yapmayı unutmayın! –

cevap

17
  1. Sadece bunu göndermek ve bunu aynı şekilde referans. (Bu sunucudan almak zaman böyle görünüyor)
  2. Sen geçerdi:
{ 
    QuarterHours: [{ 
     Minute: { 
      Registered: true, 
      NumAttendees: 1337 
     }, 
     HourStart: 1 
    }], 
    Books: ["Game of Thrones", "Harry Potter"], 
    EndDay: 2, 
    StartDay: 3 
} 
10

Sen JSON nesnesi haline sınıf serialize isteyeyim. Bunu başarmanın birçok yolu vardır, ancak bunu hızlı ve kolay bir şekilde yapmak için JSON.NET'u deneyebilirsiniz. onun zaten projesine dahil değilse

, sizinle Nuget aracılığıyla bu ekleyebilirsiniz:

Install-Package Newtonsoft.Json 

benzer görünümde olacaktır kodu: Bu client- geçirilen sonra

var json = JsonConvert.SerializeObject(master); 

yan, daha sonra JSON nesnesinden başka herhangi bir şey gibi okuyabilirsiniz.

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

Ayrıca sunucuya SignalR ile bu geçebilir ve dönüştürmek amacıyla JsonConvert.DeserializeObject kullanarak JSON nesnesi serisini: Sen JSON nesnesi için SignalR dize mesaj dönüştürmek için aşağıdaki javascript kodu kullanabilirsiniz C# sınıflarınız. Daha fazla bilgi için belgelere bakın: http://james.newtonking.com/projects/json/help/

+0

Niçin bu kadar> – user1477388

+0

reddedildi sorusu, nesnelerin nasıl serileştirileceği değil, karmaşık nesnelerin singalR'ye nasıl iletileceğiydi. –

+11

... ve bir çözüm nesneleri JSON'a serileştirerek. –