3
我创建了一个C#Windows运行时组件,它具有一个接受IDictionary参数的公共静态方法。如何将JavaScript中的字典传递给C#运行时组件?
public sealed class DictionaryTest
{
public static void print(IDictionary<string, string> dict)
{
}
}
我访问从WinJS应用程序库,我把这个方法就像default.js如下:
var ps = new Windows.Foundation.Collections.PropertySet();
ps['testkey'] = "testvalue";
TestComponent.DictionaryTest.print(ps);
当我运行的应用程序,我得到一个“不支持此接口”错误。 print()的intellisense表明它接受Windows.Foundation.Collections.IMap的参数,但我无法找到该集合。
我该如何传递一个类似Javascript的对象字典来打印(IDictionary)?
编辑: 虽然@IAbstract提出了一个很好的观点,但我不能用它作为解决方案。我的约束是我无法修改print()方法。所以我需要能够将字符串的字典类型对象从javascript传递给print(IDictionary<string, string> dict)
方法。
看看'方法签名'.....下一步我会问'ps'类型'Dictionary'或集合'如果是的话,那么你需要创建你不是基于的Dictionary'类型在你已经介绍的代码..'ps'有一个.ToDictionary()扩展方法..?如果不是那么你可以尝试使用'Linq'语句创建一个例如你可以尝试像这样'var dictObj = ps.ToDictionary(x => x,x => x);'只是为了看看它是否成功转换该集合到一个'词典<>'' –
MethodMan
被Windows.Foundation.Collections.PropertySet'声明如下: '公共密封类属性集:对象, IPropertySet, IObservableMap <字符串,对象>, 的IDictionary <字符串, Object>, IEnumerable' 至少,OP的值需要从'Object'转换为'string'。 –
IAbstract
感谢@IAbstract,我修改了打印(IDictionary dict)并将该对象转换为字符串,并且代码有效。你会认为传递一个字符串(这也是一个对象)会工作:)我不知道这是否仍然是最好的方式将字典型对象传递给Windows运行时组件 –
csaam