我在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