Я создал new object()
в Javascript, поместил в него некоторые значения и передал его PageMethod
...
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
... который в своей подписи получает аргумент dynamic
.
[WebMethod]
public static object getPeople(dynamic filters)
{
...
Весь код компилируется и запускается без проблем, за исключением PageMethod на стороне сервера, который понимает параметр dynamic
как Dictionary
.
Когда я отлаживаю код, чтобы увидеть определение объекта filters
, он показывает мне следующий тип: filters = {System.Collections.Generic.Dictionary<string,object>}
Итак, единственный способ справиться с этим - использовать его как Dictionary
...
var name = filters["Name"];
var age = filters["Age"] as int?;
.. Но я намеревался использовать его как динамический объект
var name = filters.Name;
var age = filters.Age;
Я знаю, что это совсем не страшно, и у меня нет абсолютно никаких проблем с доступом к нему в качестве словаря (и я также знаю, что могу создать DynamicObject
«Прокси» для доступа к словарю, как динамический объект).
Я просто хочу это понять. Итак:
- Почему PageMethod понимает его как словарь?
- Есть ли способ заставить эту работу работать как Динамический объект (кроме подхода «Прокси»)?
Я надеялся, что это может сработать, потому что я обычно определяю эти Filter
классы на стороне сервера и создаю его в Javascript, следуя той же структуре, и PageMethod понимает его и правильно конвертирует, когда я определяю этот тип в качестве аргумента ( например: getPeople(Filters filters)
). Итак, мне было интересно, может ли он сделать это также с динамическими объектами (экономя мое время и ненужные классы).
Я ценю ваше время и помощь.