AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2021, 01:13   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Вот готовый проект сериализации\десериализации JSON\XML, на базе Newtonsoft.Json. Попробуйте, сравните. Как раз реализуется концепция "за счёт создания структуры классов, соответствующих структуре получаемого JSON, и прямая десериализация". Но скорость обработки от этого не зависит.

Ремарки:
- В части JSON это в бОльшей степени даунгрейд класса FormJsonSerializer из D365
- В части XML написано с нуля
- Всё это реализовано в разгар событий августа 2020 в Беларуси, под шум взрывающихся гранат и стрельбы, поэтому есть огрехи и частности в коде. Вылизывать уже не было сил.
- Принцип использования как в AX2012\D365\.Net: создаём класс-контракт (можно вложенные), проставляем аттрибуты на методах, которые необходимо сериализоывать. Уровень вложенности значения не имеет.
- Вместо аттрибутов, которые AX2009 нативно не поддерживает, используются специального вида макрос, тут картинка

Вот так вызываем (в проекте есть джоб)
X++:
static void AXSerializerTutorial_JSON_XML(Args _args)
{
    VendTable           vendTable;
    DCVendor            dcVendor;
    DCVendors           dcVendors;

    Counter             idx;

    str                 json, xml;
    ;

    dcVendors = DCVendors::construct();

    while select vendTable
      order by RecId desc
    {
        dcVendor = DCVendor::constructVendTable(vendTable);

        dcVendors.parmVendors().addEnd(dcVendor);

        idx ++;

        if (idx == 3)
        {
            break;
        }
    }

    dcVendors.parmVendors(dcVendors.parmVendors()); // powinno być tak ;)

    json = dcVendors.serialize(HTTPRequestContentType::Json);

    xml  = dcVendors.serialize(HTTPRequestContentType::XML);

    info(json);
    info(xml);

    dcVendors = dcVendors.deserialize(json, HTTPRequestContentType::Json);
    // dcVendors = dcVendors.deserialize(xml,  HTTPRequestContentType::XML); // something went wrong... to be debugged
}
Получаем JSON
Нажмите на изображение для увеличения
Название: JSON1.png
Просмотров: 38
Размер:	60.0 Кб
ID:	13251

Получаем XML
Нажмите на изображение для увеличения
Название: XML1.png
Просмотров: 46
Размер:	61.5 Кб
ID:	13252


Да, прицел был больше на JSON, поэтому XMLная часть не особо отлаживалась - Я уже вижу на картинке не совсем верные наименования узлов + получил взлёт при десиарелизации. Наврное мелочь, но это не точно


В общем попробуйте - расскажите по скорости и в целом, как оно.

SharedProject_AXSerializer_JSON_XML.zip
За это сообщение автора поблагодарили: mazzy (5), trud (10), raz (5), sukhanchik (6), Ace of Database (10), vmoskalenko (6), Sergey Petrov (1), S.Kuskov (10).
Старый 26.10.2021, 17:49   #2  
Sergey Petrov is offline
Sergey Petrov
Участник
 
80 / 19 (1) ++
Регистрация: 03.04.2007
Адрес: Saint-Petersburg, Russia
Цитата:
Сообщение от DSPIC Посмотреть сообщение
...В общем попробуйте - расскажите по скорости и в целом, как оно.
Прикрутил к нашей задаче. По времени почти то же самое. Чуть быстрее. Но структура и читабельность кода улучшилась на порядок. Так что, будем использовать предложенную методику.

Всем спасибо!
__________________
MS Dynamics AX 2009

Kernel 5.0.1600.4110
Application 5.0.1500.6491
Теги
aif, ax2012, json, services, wcf

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Using Service Management to Track Service Orders Blog bot DAX Blogs 1 25.08.2013 19:16
AIF: Microsoft Dynamics AX Services and Windows Azure Service Bus Blog bot DAX Blogs 0 24.07.2013 03:13
emeadaxsupport: AX for Retail 2012 R2: Installing the Real-time Service Blog bot DAX Blogs 0 19.12.2012 11:11
Dynamics AX: WCF: The Enterprise Service Bus for Dynamics AX and the rest of the Microsoft Stack Blog bot DAX Blogs 0 10.03.2009 16:05
Pokluda: Outbound web service (AIF) Blog bot DAX Blogs 0 28.10.2006 17:43

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:24.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.