DotNetBrowser中JS无法调用C#索引器的问题咨询
.NET对象挂载到JS后无法调用索引器的解决方案
问题描述
我正在开发一个.NET项目,需使用不可修改的现有对象。目标C#类如下:
class Fields { Hashtable list = new Hashtable(); public Fields this[string Name] { get{ // 省略内部实现 } } }
已将对象挂载到JS的window对象:
window = await _browser.MainFrame.ExecuteJavaScript<IJsObject>("window"); window.Properties["Data"] = _myObject;
在JS环境中可访问其他内容,但无法调用Fields的索引器,尝试window.Data.Fields['123']无效,求解决方法。
可行方案
- 直接调用底层
get_Item方法
.NET的索引器在编译后会生成名为get_Item的公共方法,你可以在JS中直接调用这个方法来访问索引器:
window.Data.Fields.get_Item('123');
- 创建.NET代理类中转访问
如果第一种方法不生效,可以在.NET侧创建一个代理类,将原Fields对象的索引器暴露为JS可识别的动态属性,无需修改原Fields类:
public class FieldsJsProxy { private readonly Fields _originalFields; public FieldsJsProxy(Fields original) { _originalFields = original; } // 动态暴露索引器 public dynamic this[string key] => _originalFields[key]; }
挂载时替换为代理对象:
window.Properties["Data"] = new FieldsJsProxy(_myObject.Fields);
之后在JS中即可通过常规的方括号语法访问:
window.Data['123']; // 若键名符合JS标识符规则,也可使用点语法 window.Data['123'];
内容的提问来源于stack exchange,提问作者gashach
相关产品推荐
相关产品推荐

