我用JavaScript创建了一个new object()
,将一些值放入其中,然后将其传递给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;
我知道这根本没什么大不了,对我来说作为Dictionary来访问它绝对没有问题(而且我也知道我可以使
DynamicObject
“Proxy”像动态对象一样访问Dictionary)。我只想了解这一点。所以:
我希望这能行得通,因为我通常在服务器端定义那些
Filter
类,并按照相同的结构在Javascript中创建它,而当我将Type定义为参数时,PageMethod可以理解并正确转换它(例如:getPeople(Filters filters)
)。因此,我想知道它是否还能对动态对象做到这一点(为我节省时间和不必要的类)。感谢您的宝贵时间和帮助。
最佳答案
Dictionary<string, object>
,因此JSS的第一步是将JSON字符串转换为Dictionary(如果未注册目标类型的自定义转换器),然后最终将该Dictionary作为转换的最终结果动态。 您可以尝试为
dynamic
编写自己的JavaScriptConverter。这是我刚才写过的同一场比赛的一个例子:https://gist.github.com/6cfcdfdf2a117fa5e81b我的是自定义序列化行为而不是反序列化,但是您可以在Deserialize方法中实现自己的代码。