Десериализовать JSON в Wonderware ArchestrA / Quickscript.NET

Я использую VB / .NET через язык сценариев Wonderware ArchestraIDE Quickscript.net. Я вижу, что есть несколько способов справиться с десериализацией JSON в .NET (DataContractJsonSerializer, JavaScriptSerializer, Json.net/Newtonsoft.Json), но не могу найти ни одного в подмножестве Wonderware.

Похоже, что JavaScriptSerializer не входит в состав платформы .NET для Quickscript.NET, поскольку ArchestrA ничего не распознает из System.Web.Script; и ни один из них не является DataContractJsonSerializer (System.Runtime.Serialization.Json там нет).

Я также не нашел ничего о json в Quickscript.net документы.

Каков стандартный / лучший способ десериализации JSON в этой среде?

Вы можете написать свою собственную библиотеку и импортировать ее как библиотеку скриптовых функций в ArchestrA. Таким образом вы получите гораздо больший доступ к системе .NET.

Grambot 23.05.2018 15:20

Спасибо - я склонялся к этому решению, но подумал, что это немного излишне. В данный момент я импортирую json.net, чтобы выполнить простой синтаксический анализ, но не могу выполнить надлежащую десериализацию из сценария с его помощью либо потому, что, похоже, нет поддержки дженериков или способа создания классов в сценарии.

mijiturka 23.05.2018 15:59
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
2
2
704
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я использую библиотеку newtonsoft .net, импортировав ее в среду разработки Wonderware (Galaxy> Импорт> Библиотека функций сценария)

https://www.newtonsoft.com/json

Ответ принят как подходящий

Я бы рекомендовал вам поработать над внешней программой для тестирования десериализации JSON в качестве автономного метода (с использованием некоторых сторонних библиотек, таких как Newtonsoft .NET), чтобы скомпилировать ее в DLL. Затем импортируйте его в структуру ArchestrA через IDE и используйте свой собственный метод.

Это будет лучший подход, поскольку со сценарием ArchestrA вы не сможете объявлять классы или использовать списки, что вам следует делать при работе с красивой структурированной десериализацией JSON для вашего лучшего понимания.

Вот в чем загвоздка: избегайте компиляции библиотеки кода, которая делает внешнюю ссылку на другую. Объекты ArchestrA не могут обрабатывать этот внешний вызов во время выполнения, даже если вы импортируете другую библиотеку и все другие зависимости. Есть способ правильно импортировать DLL, который зависит от выполнения других библиотек, но, на мой взгляд, это не лучшая практика, если вы (или другой некомпетентный человек) собираетесь в будущем обслуживать свой исходный код.

Моя последняя рекомендация - получить исходный код открытых библиотек (например, Newtonsoft .NET), сделать вашу программу классом вместе со своим проектом и скомпилировать ее в единую сборку. После этого вам просто нужно импортировать библиотеку и выполнить правильные вызовы методов и экземпляры классов.

Если вы предпочитаете не использовать один проект компиляции, попробуйте использовать ILMerge для объединения двух библиотек в одну, даже если у них есть зависимость, она работает с объектами ArchestrA во время выполнения.

Другие вопросы по теме