Я использую 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 в этой среде?
Спасибо - я склонялся к этому решению, но подумал, что это немного излишне. В данный момент я импортирую json.net, чтобы выполнить простой синтаксический анализ, но не могу выполнить надлежащую десериализацию из сценария с его помощью либо потому, что, похоже, нет поддержки дженериков или способа создания классов в сценарии.
Я использую библиотеку newtonsoft .net, импортировав ее в среду разработки Wonderware (Galaxy> Импорт> Библиотека функций сценария)
Я бы рекомендовал вам поработать над внешней программой для тестирования десериализации JSON в качестве автономного метода (с использованием некоторых сторонних библиотек, таких как Newtonsoft .NET), чтобы скомпилировать ее в DLL. Затем импортируйте его в структуру ArchestrA через IDE и используйте свой собственный метод.
Это будет лучший подход, поскольку со сценарием ArchestrA вы не сможете объявлять классы или использовать списки, что вам следует делать при работе с красивой структурированной десериализацией JSON для вашего лучшего понимания.
Вот в чем загвоздка: избегайте компиляции библиотеки кода, которая делает внешнюю ссылку на другую. Объекты ArchestrA не могут обрабатывать этот внешний вызов во время выполнения, даже если вы импортируете другую библиотеку и все другие зависимости. Есть способ правильно импортировать DLL, который зависит от выполнения других библиотек, но, на мой взгляд, это не лучшая практика, если вы (или другой некомпетентный человек) собираетесь в будущем обслуживать свой исходный код.
Моя последняя рекомендация - получить исходный код открытых библиотек (например, Newtonsoft .NET), сделать вашу программу классом вместе со своим проектом и скомпилировать ее в единую сборку. После этого вам просто нужно импортировать библиотеку и выполнить правильные вызовы методов и экземпляры классов.
Если вы предпочитаете не использовать один проект компиляции, попробуйте использовать ILMerge для объединения двух библиотек в одну, даже если у них есть зависимость, она работает с объектами ArchestrA во время выполнения.
Вы можете написать свою собственную библиотеку и импортировать ее как библиотеку скриптовых функций в ArchestrA. Таким образом вы получите гораздо больший доступ к системе .NET.