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

Я использую 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 в этой среде?


person mijiturka    schedule 22.05.2018    source источник
comment
Вы можете написать свою собственную библиотеку и импортировать ее как библиотеку функций сценария в ArchestrA. Таким образом, вы получаете намного больше доступа к системе .NET.   -  person Grambot    schedule 23.05.2018
comment
Спасибо - я склонялся к этому решению, но подумал, что это что-то вроде излишества. В данный момент я импортирую json.net для простого синтаксического анализа, но не могу выполнить правильную десериализацию из скрипта либо потому, что, похоже, нет поддержки дженериков или способа создания классов в скрипте.   -  person mijiturka    schedule 23.05.2018


Ответы (2)


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

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

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

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

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

person MZanetti    schedule 25.06.2019

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

https://www.newtonsoft.com/json

person Jeff Tapia    schedule 23.02.2019