eve*_*ton 5 javascript c# asp.net dynamic pagemethods
我new object()在Javascript中创建了一个,将一些值放入其中并将其传递给PageMethod...
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
Run Code Online (Sandbox Code Playgroud)
......在它的签名中,它会收到一个dynamic论点.
[WebMethod]
public static object getPeople(dynamic filters)
{
...
Run Code Online (Sandbox Code Playgroud)
整个代码编译并运行没有问题,除了服务器端PageMethod,它将dynamic参数理解为Dictionary.
当我调试代码以查看filters对象的定义时,它显示以下类型:filters = {System.Collections.Generic.Dictionary<string,object>}
因此,处理它的唯一方法是将其用作Dictionary......
var name = filters["Name"];
var age = filters["Age"] as int?;
Run Code Online (Sandbox Code Playgroud)
..但我的意图是将它用作动态对象
var name = filters.Name;
var age = filters.Age;
Run Code Online (Sandbox Code Playgroud)
我知道这根本不是什么大问题,而且我作为一个字典访问它绝对没有问题(而且我也知道我可以创建一个DynamicObject"代理"来像动态对象一样访问字典).
我只想了解这一点.所以:
我希望这可以工作,因为我通常Filter在服务器端定义这些类并在Javascript中按照相同的结构创建它,并且当我将Type定义为参数时,PageMethod理解它并正确转换它(例如:) getPeople(Filters filters).所以,我想知道它是否也可以用动态对象(节省我的时间和不必要的类).
感谢您的时间和帮助.
page 方法将其视为字典的原因是 JavaScriptSerializer 内部的工作方式。由于所有 JSON 对象都可以表示为Dictionary<string, object>,JSS 的第一遍是将 JSON 字符串转换为字典(如果没有注册目标类型的自定义转换器),并且最终会将该字典作为转换的最终结果动力学。
不容易。
您可以尝试编写自己的 JavaScriptConverter for dynamic. 这是我不久前写的同一范围内的示例: https: //gist.github.com/6cfcdfdf2a117fa5e81b
我的自定义序列化行为而不是反序列化,但您可以在 Deserialize 方法中实现自己的代码来执行此操作。
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |