22.10.2021, 08:40 | #1 |
Участник
|
AXSerializer (DSPIC): вопросы
Цитата:
Сообщение от DSPIC
Вот готовый проект сериализации\десериализации JSON\XML, на базе Newtonsoft.Json. Попробуйте, сравните. Как раз реализуется концепция "за счёт создания структуры классов, соответствующих структуре получаемого JSON, и прямая десериализация". Но скорость обработки от этого не зависит.
... В общем попробуйте - расскажите по скорости и в целом, как оно. Вложение 13253 можно вопросы? 1. AXSerializer использует рефлекшн, чтобы получить название парм-методов. Рефлекшн в аксапте - медленный. что с производительностью? 2. AXSerializer кэширует инфо о классах в infolog.globalCache. Каков обычный размер кеша для обычного инстанса него и что со сборкой мусора, когда в перманентном кэше столько объектов? 3. метод constructDCProperty пытается разобрать второй параметр в парм-методах. в примере вижу только null в этом параметре. подозреваю, что параметр определяет только тип содержимого в списке. а что там может быть и зачем этот второй параметр? 4. вижу что у парм-методов первой строкой что-то вроде атрибута метода. но не понял как этот псведо-атрибут используется в проекте. можешь рассказать что это, где и как используется? 5. тебе не кажется, что предположение о parm-методе слишком жесткое? может стоило разбирать тип возвращаемого значения и типы параметров метода? все равно ж далее по коду они анализируются. 6. вижу, что коллекции - это тольео List и Array. Почему нет Set, Struct? и почему не потомки? (== вместо is). И почему не контейнер? это просто так исторически сложилось или ограничение движка? а какое? Upd: 7. И да. На что бы ты сам посоветовал обратить внимание в проекте? ------------- было бы круто, если бы ты выложил проект на гитхаб или еще куда. где можно будет твой проект форкнуть и предложить изменения. еще раз спасибо! Последний раз редактировалось mazzy; 22.10.2021 в 11:03. |
|
22.10.2021, 14:55 | #2 |
Боец
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Что я там не дожал в части XML - это продумать\привести в порядок названия узлов. Сейчас там можно встретить такие методы, как GetElementName, GetRootName. С одной стороны - это опять же можно воткнуть в аттрибуты. С другой стороны - хотел, чтобы сериализатор работал со стандартным AIF AX2009 (Если помнишь, стандарт умеет серилизовывать только Document-Services, когда как для CustomServices правила сериализации и XSD приходится хардкодить самому, что то ещё удовольствие). Так вот GetElementName\GetRootName нужны именно для AIF + все мои контракты наследуются от XMLSerialisable, что опять же нужно для AIF. В результате - эту чуть нужно бы проверить\пересмотреть. На чём я там остановился - уже не помню. Да, XSD этот проект тоже генерит. Но помнится не всё типы поддерживаются, т.к. я отлаживал только то, что мне было нужно. Что ещё: нужно было бы избавиться от классов-контрактов типа *List. Они избыточны. Т.е. достаточно в аттрибуте укуазать, что это будет List такого-то типа. С удовольствием передам тебе это право. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
22.10.2021, 15:39 | #3 |
Участник
|
Спасибо.
ок. понял. хотя бы число элементов в кэше. особенно по сравнению с кэшем АИФа. ок. понял. Цитата:
Сообщение от DSPIC
Всё верно. Исключительно для подсказки сериализатору - какого типа объект в списке. Хочется это запихнуть в псевдо-аттрибут (макрос сверху метода), но т.к. этот макрос, по сути просто комментарий, то а) в случае неверного написания не получим compilation error б) не увидим использование этого типа в CrossRef
Цитата:
тот же struct позволяет создавать именованные поля, не создавая классов. тот же struct в CIL 2012 работает сильно быстрее чем остальные коллекции (из-за чего и используется в АИФе 2012) Цитата:
Цитата:
. спасибо. тогда можно попросить тебя сделать простейшие начальные шаги: 1. выбери имя проекту и создай пустой проект на гитхабе (или гитлабе, или где тебе удобнее) 2. при создании выбери лицензию (типичная лицензия - MIT - разрешает пользователям любое использование и освобождает автора от ответственности за любое использование другими) 3. желательно, чтобы ты, как автор, написал какой-нибудь readme.md (можно в пару строчек, можно просто текст) этого будет достаточно, чтобы я смог форкнуть и прислать тебе запрос с первоначальным проектом и человеко-читаемым кодом твоего проекта. такой способ публикации оставит за тобой не только авторские права, но и "первородство" с точки зрения гитхаба а дальше да, можно будет попробовать поизучать и попробовать что-то сделать с проектом. ------------ "Человеко-читаемый код" позволяет не только читать, но и делать ссылки на строки проекта. Например. А большой xpo-файл тот же гитхаб может начать показывать только в raw-режиме. |
|