В аксапте нельзя очень просто сериализовать любой класс, как это например делается в C# с помощью пакета Newtonsoft.Json.
Поэтому приходится извращаться.
Представить в формате JSON данные из стандартных классов типа Struct, Set, List, Container. Если они включают в себя какие-то нестандартные классы, то облегчить сериализацию нестандартных классов с помощью реализации в них методов с предопределённым названием (в нашем случае - json() и struct()).
В JSON два вида структур данных :
- коллекция key/value пар
- массив
Распределение стандартных классов Ax2009 по видам структур :
| Структура | Классы |
|---|---|
| Коллекция key/value пар | StructMap (если key имеет тип String) |
| Массив | SetListContainerArray |
В null конвертируются только неинициализированные объекты типа Class.
Неинициализированные примитивы выводятся в виде следующих значений.
| Примитив | Неинициализированное значение |
|---|---|
StringDateutcDateTime |
"" |
IntInt64EnumReal |
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;
}
- зависимостей нет