2013-04-01 18 views
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)方法。

+0

看看'方法签名'.....下一步我会问'ps'类型'Dictionary'或集合'如果是的话,那么你需要创建你不是基于的Dictionary '类型在你已经介绍的代码..'ps'有一个.ToDictionary()扩展方法..?如果不是那么你可以尝试使用'Linq'语句创建一个例如你可以尝试像这样'var dictObj = ps.ToDictionary(x => x,x => x);'只是为了看看它是否成功转换该集合到一个'词典<>'' – MethodMan

+0

被Windows.Foundation.Collections.PropertySet'声明如下: '公共密封类属性集:对象, IPropertySet, IObservableMap <字符串,对象>, 的IDictionary <字符串, Object>, IEnumerable ' 至少,OP的值需要从'Object'转换为'string'。 – IAbstract

+0

感谢@IAbstract,我修改了打印(IDictionary dict)并将该对象转换为字符串,并且代码有效。你会认为传递一个字符串(这也是一个对象)会工作:)我不知道这是否仍然是最好的方式将字典型对象传递给Windows运行时组件 – csaam

回答

0

Windows.Foundation.Collections.PropertySet声明如下:

public sealed class PropertySet : Object, 
    IPropertySet, 
    IObservableMap<String, Object>, 
    IDictionary<String, Object>, 
    IEnumerable<KeyValuePair> 

铸值对象到字符串。隐含地不能总是依赖于Object.ToString()

相关问题