从 Javascript 接收 PageMethod 中的动态对象
本文关键字:动态 对象 PageMethod Javascript 接收 | 更新日期: 2023-09-27 18:18:50
我在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;
我知道这根本不是什么大问题,对我来说,将其作为字典访问绝对没有问题(我也知道我可以制作一个DynamicObject
"代理"来像动态对象一样访问字典(。
我只是想了解这一点。所以:
- 为什么PageMethod将其理解为字典?
- 有没有办法将其作为动态对象工作("代理"方法除外(?
我希望这可以工作,因为我通常在服务器端定义那些Filter
类,并按照相同的结构在 Javascript 中创建它,并且当我将该类型定义为参数时,PageMethod 可以理解它并正确转换它(例如:getPeople(Filters filters)
(。所以,我想知道它是否也可以用动态对象做到这一点(节省我的时间和不必要的课程(。
感谢您的时间和帮助。
-
页面方法将其视为字典的原因是因为JavaScriptSerializer在内部的工作方式。由于所有JSON对象都可以表示为
Dictionary<string, object>
,JSS的第一遍是将JSON字符串转换为字典(如果没有注册目标类型的自定义转换器(,并且您最终会得到该字典作为动态转换的最终结果。 -
不容易。
您可以尝试为dynamic
编写自己的JavaScriptConverter。这是我不久前写的同一个球场的一个例子:https://gist.github.com/6cfcdfdf2a117fa5e81b
我的自定义序列化行为而不是反序列化,但您可以在反序列化方法中实现自己的代码来执行此操作。