我在JavaScript托管代码中通过HTMLBridge传递JavaScript数组和字典型对象时遇到了一些问题。在Microsoft article detailing this topic和网络周围的信息让我无处可去。为什么我的JavaScript数组不能转换为适当的类型?
使用来自链接的文章以下信息:
.NET框架属性或输入参数类型为对象是 使用由值编组到一个 目标.NET框架属性或输入参数在下列试探法转换:
JavaScript数组转换为
object[]
。JavaScript字典转换为
Dictionary<string,object>
。
...我已经尝试传递数组和字典对象到我的托管代码在几个方面,没有成功:
的Javascript:
var array = [{key: 1}, {key: 2}, {key: 3}];
silverlight_domElement.content.testObject.testMethod(array);
C#(尝试#1):
[ScriptableMember]
//THROWS CONVERSION EXCEPTION HERE
public void testMethod(Dictionary<string,object>[] arrayParam)
{
//...
}
C#(尝试#2):
[ScriptableMember]
public void testMethod(object arrayParam)
{
//THROWS CONVERSION EXCEPTION HERE
Dictionary<string, object>[] arr = (Dictionary<string, object>[])arrayParam;
}
C#(尝试#3):
[ScriptableMember]
public void testMethod(ScriptObject arrayParam)
{
//THROWS CONVERSION EXCEPTION HERE
Dictionary<string, object>[] arr =
arrayParam.ConvertTo<Dictionary<string, object>[]>();
}
例外的是形式(其中, “目标类型” 是预期的类型的由明确或隐含演员生成的对象(包括Object[]
):
SCRIPT16389 :System.ArgumentException:无法将此对象 转换为指定的类型目标类型。参数名:TARGETTYPE
在System.Windows.Browser.ScriptObject.ConvertTo(类型目标类型, 布尔allowSerialization)
在System.Windows.Hosting.ScriptingInterface.GetScriptParamValueForType(ScriptParam scriptParam,类型desiredType)
在System.Windows.Hosting.ScriptingInterface.ConvertFromScriptParams(的ParameterInfo [] 参数,ScriptParam []参数)
在System.Windows.Browser.ManagedObjectInfo.ScriptMethod.Inv oke(ManagedObject obj,InvokeType invokeType,ScriptParam [] args)
at System.Windows.Browser.ManagedObjectInfo。调用(ManagedObject OBJ, InvokeType invokeType,字符串成员名称,ScriptParam []参数)
在System.Windows.Hosting.ManagedHost.InvokeScriptableMember(IntPtr的 pHandle,的Int32 nMemberID,的Int32 nInvokeType,的Int32 nArgCount, ScriptParam [] pArgs ,ScriptParam & pResult,ExceptionInfo & pExcepInfo)
(类似于尝试作了字典对象传递到C#作为Dictionary<string, object>
)。
这些尝试是上述文章及其后的信息误解的结果吗?或者,我的实现是不正确的?
附录:
我知道的方式来完成我与ScriptObject.getProperty()
的愿望,但我想,以应对具体,确切类型如果可能的话。更不用说,如果键控值不能作为前两者中的任何一个拆箱,它将返回本机类型,字符串或ScriptObject。我讨厌减少到在一个任意嵌套的对象上反复调用它,直到我到达一个本地类型。
@RBarryYoung,我相信这个术语是指由键值对组成的简单的Javascript对象,这是我可以从论文中推断出来的。还有什么可能指的是? – Kevin 2013-02-22 19:17:51
我现在看到它。 MS在前面的文章中解释说。 – RBarryYoung 2013-02-22 19:31:36
你是否能够使它适用于非数组Javascript字典? – RBarryYoung 2013-02-22 19:38:42