2010-06-16 3 views
1

Я хотел бы передать ассоциативный массив (или просто объект с именами свойств & значений) в мой объект ActiveXObject. Я не могу найти тех, кто успешно и просто передал сложные данные из javascript в объект ActiveX.Как передать ассоциативный параметр Array из javascript в объект ActiveX?

My ActiveX объект загружается в IE, и это мое, поэтому я могу изменить код метода & на то, что будет работать. Я также контролирую структуру javascript.

Без простого способа сделать это Я подумываю о кодировании url и отправке его в виде строки. Но это кажется немного глупым, если возможно просто передать объект.

Объект ActiveX кодируется в C#, если это делает никакой разницы ...

ответ

2

Я нашел лучший способ сделать это, чтобы отправить строки JSON обратно & вперед. Это очень просто для простых данных и сложных данных.

Чтобы отправить данные из ActiveXObject в javascript, просто используйте StringBuilder или аналогичные для форматирования данных как JSON.

Чтобы отправить данные из javascript в ActiveXObject, используйте JSON-библиотеку в javascript для кодирования данных, а затем используйте JSON-парсер в .net, например JSON.Net, чтобы прочитать его.

В качестве альтернативы, для реальных простых случаев, когда вы не хотите анализатор JSON, вы можете использовать строки с кодировкой URL.

+0

+1: обратите внимание, что теперь мы можем использовать JavaScriptSerializer. Можно было бы избежать дополнительной зависимости от объекта ActiveXObject. Интересно, почему у этого нет голосов. спасибо за это простое решение, которое не произошло со мной. – naveen

1

Мои ActiveX/JavaScript знания немного устарели, но так ActiveX ...

В идеале вы хотели бы передать в Object, который вы используете как ассоциативный массив. Но COM не распознает этот тип. COM поддерживает SafeArray, но JavaScript не понят.

Мы отправили либо строки join() ed, либо отправили простые документы Xml. Вам, вероятно, не нужна DOM для создания xml, а на стороне receivign вы можете напрямую их пересылать в свой любимый Xml Api (в C#, i reccomend XDocument).

+0

Спасибо. Думаю, в моем случае быстрее будет просто использовать имя = значение и другое имя = строки другого значения. Но здорово знать, что я не должен беспокоиться о поиске часов для решения, которое позволяет мне использовать сложные объекты. – Rory

0

Прошло некоторое время, но я помню, что делал что-то подобное с SafeArrays и объектом VBArray. Это специфичная для Microsoft Jscript реализация, но поскольку вы используете ActiveX, это может быть интересно изучить.

1

Самый быстрый способ, вероятно, использовать COM-объект Scripting.Dictionary, к которому можно получить доступ через JScript, затем включить ссылку на него в ваш проект C# (если он не указан в файле scrrun.dll), тогда укажите IDictionary интерфейс (а не System.Collections один, один из импортированной библиотеки COM) в качестве параметра вашей функции. Тогда у вас есть ключ-значение ассоциативный словарь в вашем распоряжении.

+0

Я не пробовал это, но это звучит как отличное решение. – Rory

Смежные вопросы