25

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

在 .NET 中,我可以引用这样的值:master.QuarterHours[2].Minute.Registered. 我的问题:

  1. 我将如何master.QuarterHours[2].Minute.Registered在 Javascript 端的接收器方法中进行引用?
  2. 我将如何Master在 Javascript 中构建要发送到 .NET 端的对象?
4

2 回答 2

22
  1. 您只需发送它并以相同的方式引用它。
  2. 你会通过(这是从服务器获取它时的样子):
{
    QuarterHours: [{
        Minute: {
            Registered: true,
            NumAttendees: 1337
        },
        HourStart: 1
    }],
    Books: ["Game of Thrones", "Harry Potter"],
    EndDay: 2,
    StartDay: 3
}
于 2013-06-27T18:34:12.030 回答
10

您可能希望将您的类序列化为 JSON 对象。有很多方法可以做到这一点,但您可以尝试使用 JSON.NET来快速轻松地做到这一点。

如果它尚未包含在您的项目中,您可以通过 Nuget 添加它:

Install-Package Newtonsoft.Json 

代码看起来像:

var json = JsonConvert.SerializeObject(master);

一旦这被传递到您的客户端,您就可以像任何其他对象一样从您的 JSON 对象中读取数据。您可以使用以下 javascript 代码将 SignalR 字符串消息转换为 JSON 对象:

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

您还可以通过 SignalR 将其传递到服务器并使用 JsonConvert.DeserializeObject 反序列化 JSON 对象,以便将其转换为您的 C# 类。在此处查看文档以获取更多详细信息:http: //james.newtonking.com/projects/json/help/

于 2013-06-27T21:03:04.710 回答