Показать сообщение отдельно
Старый 22.10.2021, 01:13   #7  
DSPIC is offline
DSPIC
Боец
 
1,074 / 1215 (43) ++++++++
Регистрация: 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
Просмотров: 23
Размер:	60.0 Кб
ID:	13251

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


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


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

SharedProject_AXSerializer_JSON_XML.zip
За это сообщение автора поблагодарили: sukhanchik (6), trud (10), mazzy (5), S.Kuskov (10), raz (5), Ace of Database (10), Sergey Petrov (1), vmoskalenko (6).