Третий день пытаюсь преодолеть проблему, но всё-таки придётся Вас побеспокоить ...

Я постарался создать минимальный демонстрационный тест, что бы не замылить ошибку:
Код: Выделить всё
TestPublic Routine
Data
G_Info Group,Type
Flag Bool
end
G_OnLine Group,Type
Info Group(G_Info). ! ЕСЛИ ЗАКМОМЕНТИРОВАТЬ ВОТ ЭТУ СТРОКУ, тогда qPacket.Info.flag = TRUE и это правильно
end
G_Valid Group,Type
Online Group(G_OnLine).
end
qPacket Queue(G_Valid)
Info Group(G_Info).
end
jStr String('[{{"Info":{{"Flag":true},"Online":{{"Info":{{"Flag":true}}}]')
Json cJSONFactory
Code
Json.ToQueue(jStr,qPacket,,'[{{"name":"Flag","IsBool":true}]')
Get(qPacket,1)
Message(qPacket.Info.flag) ! = FALSE и это неправильно !!! :(
!Message(qPacket.Online.Info.flag) ! = TRUE и это правильно
2. Но если убрать из списка qPacket второе поле с именем "Flag" (например закомментировав G_OnLine.Info) -
то всё чудесным образом начинает работать правильно, т.е. qPacket.Info.flag меняет значение на TRUE.

3. Интересно, что отключить блок с дублирующим именем поля нельзя.
Точнее отключить можно, но проблему это не решает:
Код: Выделить всё
qPacket Queue
Online Group
Info Group !
Flag Bool !
end !
end
Info Group
Flag Bool
end
end
jStr String('[{{"Info":{{"Flag":true},"Online":{{"Info":{{"Flag":true}}}]')
Json cJSONFactory
Code
! Не решает проблему :(
Json.ToQueue(jStr,qPacket,,'[{{"name":"Flag","IsBool":true},{{"name":"Online","ignore":true}]')
Get(qPacket,1)
Message(qPacket.Info.flag) ! = FALSE и это неправильно !!! :(