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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.10.2021, 01:13   #8  
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).
Теги
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, время: 10:24.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.