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
。私の質問:
master.QuarterHours[2].Minute.Registered
Javascript側のレシーバーメソッドで?Master
オブジェクトをJavaScriptでどのように構築しますか?{ QuarterHours: [{ Minute: { Registered: true, NumAttendees: 1337 }, HourStart: 1 }], Books: ["Game of Thrones", "Harry Potter"], EndDay: 2, StartDay: 3 }
クラスを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/