SignalR は ASP.NET MVC や Web API のようにアクションの引数は自動的にバインドしてくれます。
public class SampleHub : Hub { public void Sample(int id, string text) { // id と text には値が入った状態 } }
ちなみに int や string といったプリミティブな型以外でもバインドしてくれます。例えば以下のようなクラスであっても、ちゃんと値がセットされた状態で受け取れます。
public class FormModel { public int Id { get; set; } public string Text { get; set; } } public class SampleHub : Hub { public void Sample(FormModel model) { // model.Id と model.Text には値が入った状態 } }
他にも Guid などもバインドしてくれて非常に便利なんですが、ソースを呼んだところ SignalR がモデルバインダを持っているわけではなくて、Json.NET のデシリアライズ機能をそのまま使っているだけみたいです。
なので、Json.NET が対応している型なら SignalR でも問題なくバインドが出来るというわけです。