{"LineType":"осевая","LineTypeScale":1,"TextStyle":"Standard","MarkersPosition":"Bottom","Fracture":10,"BottomFractureOffset":0,"TopFractureOffset":0,"MarkersDiameter":10,"MarkersCount":1,"FirstMarkerType":"Type1","SecondMarkerType":"Type1","ThirdMarkerType":"Type1","BottomOrientMarkerVisible":false,"TopOrientMarkerVisible":false,"OrientMarkerVisibilityDependency":false,"OrientMarkerType":"Type1","ArrowsSize":3,"TextHeight":3.5,"FirstTextPrefix":"","FirstText":"1","FirstTextSuffix":"","SecondTextVisibility":false,"SecondTextPrefix":"","SecondText":"","SecondTextSuffix":"","ThirdTextVisibility":false,"ThirdTextPrefix":"","ThirdText":"","ThirdTextSuffix":"","BottomOrientText":"","TopOrientText":"","BottomLineAngle":0,"TopLineAngle":0,"EndPoint":"0$-642.494183297735$0","LayerName":"По умолчанию","Scale":"1:30","StyleGuid":"00000000-0000-0000-0000-000000000000"}
{"LineType":"осевая","LineTypeScale":1,"TextStyle":"_ГОСТ","MarkersPosition":"Bottom","Fracture":10,"BottomFractureOffset":0,"TopFractureOffset":0,"MarkersDiameter":10,"MarkersCount":1,"FirstMarkerType":"Type1","SecondMarkerType":"Type1","ThirdMarkerType"
Суть такова - я в примитив записываю строковые данные,Длина строки в Xdata - 255 символов. Так что если > 255, то разбивай по 255 символов. Ну и 16K на все (т.е. и твои и чужие!!!) Xdata в примитиве/объекте.
Или при работе с XRecord я могу столкнуться с чем-то подобным?Разбивать на 255 символов придётся. Не будет ограничения на 16К, но потребуется еще и копировать это всё вместе с объектом, придумывать логику обработки... Не думаю, что это хороший выход.
А вот интересно - если я заменю хранение в Xdata, на хранение в XRecord (я храню одну строчку, но очень длинную), решит ли этой моей проблемы, без больших переделок? Или при работе с XRecord я могу столкнуться с чем-то подобным?С ограничениями - вряд ли. А вот другие трудности могут возникнуть. Например, если перетаскивается перерисованный объект. При этом часто создаётся временная копия объекта. XData в этом случае у копии будут, а вот словаря расширения - нет. Потому что словарь может быть только у объекта внутри базы данных. Так что, в этом и любых подобных случаях придётся искать сперва исходный объект, затем его словарь...
Разбивать на 255 символов придётся.Насколько я помню, в Xrecords таких ограничений нет. Вроде где-то на болоте исследовали, что в Xrecord можно гигабайты информации помещать.
Цитата: Александр Ривилис от 07-12-2018, 12:32:21255 символов - это длина на один код группы:
Разбивать на 255 символов придётся.
Насколько я помню, в Xrecords таких ограничений нет. Вроде где-то на болоте исследовали, что в Xrecord можно гигабайты информации помещать.
Но, для уверенности, неплохо было бы это проверить, конечно же.
Кстати, если использовать XRecord, можно же строку перевести в байты и записать под кодом BinaryChunk. Можно даже не строку писать, а сериализовать класс с данными.Только там длина еще меньше, так как BinaryChunk содержит в себе длину этой строки:
Александр Пекшев aka Modis,А если, допустим, плагин будет установлен на турецком или китайском автокаде - как тогда будут записаны данные в XData, если среди них есть имена слоёв с соответствующими символами?
Подозреваю, что ошибка не в этом.
Обнаружен непредвиденный символ "ã"Но, к сожалению, у меня есть только ошибки сериализации и нет никакой больше информации, и нет самих документов. Придется как-то на ощупь =)
Возможно причина кроется в этой строкеВполне возможно. Строки в AutoCAD хранятся в UNICODE (не UTF8). Поэтому никакой роли не играет язык AutoCAD/Windows.Код - C# [Выбрать]
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
Строки в AutoCAD хранятся в UNICODE (не UTF8)А использование DataContractJsonSerializer требует кодировки в UTF8. Хотя, может и не требует, но на MSDN в примере присутствует кодировка. Не люблю все эти кодировки ((
А использование DataContractJsonSerializer требует кодировки в UTF8.А ты попробуй Encoding.Unicode. Впрочем, конечно какие-то символы в строке могут интерпретироваться не так. Например, "\M+XXXXXX", "\U+XXXX"
А ты попробуй Encoding.UnicodeЯ пока писал предыдущий ответ вдруг осознал, что мне json'а вообще не понадобится =)) Уже переделал свой код. Правда пока оставил старый вариант чтение из строковых значений с десириализацией в json, но как-только пользователи обновятся, то уберу и его совсем. По идее проблем с кодировками вообще не будет