Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Javascript接收PageMethod中的动态对象_C#_Javascript_Asp.net_Dynamic_Pagemethods - Fatal编程技术网

C# 从Javascript接收PageMethod中的动态对象

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

我在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 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
“代理”像动态对象一样访问字典)

我只是想了解这一点。因此:

  • 为什么PageMethod将其理解为字典
  • 是否有一种方法可以使其作为动态对象工作(除了“代理”方法)
  • 我希望这能起作用,因为我通常在服务器端定义那些
    Filter
    类,并按照相同的结构在Javascript中创建它,并且当我将该类型定义为参数时,PageMethod理解并正确地转换它(例如:
    getPeople(Filters-Filters)
    )。所以,我想知道它是否也可以通过动态对象实现这一点(节省我的时间和不必要的类)

    我感谢你的时间和帮助

  • page方法将其视为字典的原因在于JavaScriptSerializer在内部的工作方式。由于所有JSON对象都可以表示为一个
    字典
    ,因此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所抱怨的……感谢您的解释!我还会检查你的链接并做一些实验…;)