C# 从Javascript接收PageMethod中的动态对象
我在Javascript中创建了一个C# 从Javascript接收PageMethod中的动态对象,c#,javascript,asp.net,dynamic,pagemethods,C#,Javascript,Asp.net,Dynamic,Pagemethods,我在Javascript中创建了一个new object(),将一些值放入其中,并将其传递给PageMethod var filters = new object(); filters.Name = $("#tbxName").val(); filters.Age = parseInt($("#tbxAge").val()); PageMethods.getPeople(filters, getPeopleCallback); var name = filters["Name"]; var
new object()
,将一些值放入其中,并将其传递给PageMethod
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
var name = filters["Name"];
var age = filters["Age"] as int?;
。。。在签名中,它接收一个动态
参数
[WebMethod]
public static object getPeople(dynamic filters)
{
...
除了服务器端PageMethod之外,整个代码编译和运行都没有问题,它将动态
参数理解为字典
当我调试代码以查看filters
对象的定义时,它会显示以下类型:filters={System.Collections.Generic.Dictionary}
因此,处理它的唯一方法是将它用作词典
var filters = new object();
filters.Name = $("#tbxName").val();
filters.Age = parseInt($("#tbxAge").val());
PageMethods.getPeople(filters, getPeopleCallback);
var name = filters["Name"];
var age = filters["Age"] as int?;
。。但我的意图是把它当作一个动态对象
var name = filters.Name;
var age = filters.Age;
我知道这没什么大不了的,作为字典访问它绝对没有问题(我也知道我可以制作一个DynamicObject
“代理”像动态对象一样访问字典)
我只是想了解这一点。因此:
Filter
类,并按照相同的结构在Javascript中创建它,并且当我将该类型定义为参数时,PageMethod理解并正确地转换它(例如:getPeople(Filters-Filters)
)。所以,我想知道它是否也可以通过动态对象实现这一点(节省我的时间和不必要的类)
我感谢你的时间和帮助
字典
,因此JSS的第一步是将JSON字符串转换为一个字典(如果没有注册目标类型的自定义转换器),最后将该字典作为动力学转换的最终结果dynamic
编写自己的JavaScriptConverter。这是我不久前写的一个大致相同的例子:
我的方法是自定义序列化行为而不是反序列化,但是您可以在反序列化方法中实现自己的代码来实现这一点 如果
PageMethod
理解dynamic
,我会感到惊讶PageMethod
是遗留的ASMX样式的web服务,在dynamic
存在之前,它就一直处于“遗留”状态。另外,一般来说,将特定于平台的数据传递给web服务是一个坏主意,dynamic
是特定于.NET的。@JohnSaunders:那就大吃一惊吧。ASMX和page方法可以很好地处理动态类型化的返回值。更重要的是,WCF/DCJS处理dynamic
输入参数的能力并不比ASMX/JSS好,这使得旧的ASMX与WCF之间的争论成为了一个毫无意义的话题。@DaveWard:在这种情况下,使用dynamic
作为输入参数的情况如何?另外,在返回值的情况下,动态
返回对于SOAP客户机是什么样子的?还是你只是指休息?还有,你能说出你所说的“工作很好”是什么意思吗?我说“理解”。@JohnSaunders:我不确定它对肥皂有什么作用。我仅将ASMX用于其ScriptService“模式”。如果您通过ASMX将动态
对象作为JSON返回,它将序列化为键/值对,基本上就像字典
@DaveWard:字典
似乎是OP所抱怨的……感谢您的解释!我还会检查你的链接并做一些实验…;)