В аксапте нельзя очень просто сериализовать любой класс, как это например делается в C#
с помощью пакета Newtonsoft.Json
.
Поэтому приходится извращаться.
Представить в формате JSON
данные из стандартных классов типа Struct
, Set
, List
, Container
. Если они включают в себя какие-то нестандартные классы, то облегчить сериализацию нестандартных классов с помощью реализации в них методов с предопределённым названием (в нашем случае - json()
и struct()
).
В JSON
два вида структур данных :
- коллекция key/value пар
- массив
Распределение стандартных классов Ax2009 по видам структур :
Структура | Классы |
---|---|
Коллекция key/value пар | Struct Map (если key имеет тип String ) |
Массив | Set List Container Array |
В null
конвертируются только неинициализированные объекты типа Class
.
Неинициализированные примитивы выводятся в виде следующих значений.
Примитив | Неинициализированное значение |
---|---|
String Date utcDateTime |
"" |
Int Int64 Enum Real |
0 |
Guid |
"00000000-0000-0000-0000-000000000000" |
Значения типа boolean
выводятся как int
- в виде 0 или 1.
SysJSONConvert::construct().SerializeObject( object);
Пример реализации функции json()
в классах :
- Если на выходе хотим получить collection of name/value pairs :
str json()
{
return SysJSONConvert::construct()
.WithKeyValue( "field1", fieldValue1)
.WithKeyValue( "field2", fieldValue2)
.json()
;
}
- Если класс по сути является массивом (например, обёрткой для
Set
,List
и т.д.) и на выходе хотим получить ordered list of values :
str json()
{
return SysJSONConvert::construct()
.SerializeObject( valueSet)
;
}
Пример реализации функции struct()
в классах :
Возвращаем объект класса Set
. Далее класс SysJSONConvert
преобразует его в json.
anytype struct()
{
return valueSet;
}
- зависимостей нет