"Оборванные" данные в XData

Автор Тема: "Оборванные" данные в XData  (Прочитано 15079 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: "Оборванные" данные в XData
« Ответ #15 : 27-12-2018, 22:27:41 »
И все-же тема не исчерпана. Мне все-равно прилетают ошибки типа "Ошибка десериализации объекта типа...". Видимо хранению строк в XData нет доверия, так как там видимо можно хранить не все символы
В итоге решил оставить тот-же самый json, но записывать его под кодом 1004 - ExtendedDataBinaryChunk. Сейчас как раз переделываю. Надеюсь, что это будет последний вариант ))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Оборванные" данные в XData
« Ответ #16 : 27-12-2018, 23:03:00 »
Александр Пекшев aka Modis,
Подозреваю, что ошибка не в этом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: "Оборванные" данные в XData
« Ответ #17 : 27-12-2018, 23:09:25 »
Александр Пекшев aka Modis,
Подозреваю, что ошибка не в этом.
А если, допустим, плагин будет установлен на турецком или китайском автокаде - как тогда будут записаны данные в XData, если среди них есть имена слоёв с соответствующими символами?
Конечно, я не спорю, что ошибка может быть в чем-то другом. Изначально меня смутила такая ошибка:
Цитировать
Обнаружен непредвиденный символ "ã"
Но, к сожалению, у меня есть только ошибки сериализации и нет никакой больше информации, и нет самих документов. Придется как-то на ощупь =)

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: "Оборванные" данные в XData
« Ответ #18 : 27-12-2018, 23:11:16 »
Возможно причина кроется в этой строке
Код - C# [Выбрать]
  1. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Оборванные" данные в XData
« Ответ #19 : 27-12-2018, 23:20:39 »
Возможно причина кроется в этой строке
Код - C# [Выбрать]
  1. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
Вполне возможно. Строки в AutoCAD хранятся в UNICODE (не UTF8). Поэтому никакой роли не играет язык AutoCAD/Windows.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: "Оборванные" данные в XData
« Ответ #20 : 27-12-2018, 23:32:31 »
Строки в AutoCAD хранятся в UNICODE (не UTF8)
А использование DataContractJsonSerializer требует кодировки в UTF8. Хотя, может и не требует, но на MSDN в примере присутствует кодировка. Не люблю все эти кодировки ((
В общем - я сделал вспомогательный класс, в котором всего одно поле, хранящее строку, представляющую собой json. По известному примеру записываю в XData экземпляр класса. Правда при десериализации приходится сначала получить экземпляр этого класса, а потом строку перегнать в MemoryStream, ибо DataContractJsonSerializer, зараза, десириализует из потока...
Короче - добавил костыль =)) Можно было бы проще, но придется другие места переделывать, плюс "поддержка обратной совместимости" - сначала пробую почитать по старому из строк, а потом уже по новому - из байт.
Буду следить/тестировать дальше как пойдет

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: "Оборванные" данные в XData
« Ответ #21 : 27-12-2018, 23:40:07 »
А использование DataContractJsonSerializer требует кодировки в UTF8.
А ты попробуй Encoding.Unicode. Впрочем, конечно какие-то символы в строке могут интерпретироваться не так. Например, "\M+XXXXXX", "\U+XXXX"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Пекшев aka ModisАвтор темы

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: "Оборванные" данные в XData
« Ответ #22 : 27-12-2018, 23:43:28 »
А ты попробуй Encoding.Unicode
Я пока писал предыдущий ответ вдруг осознал, что мне json'а вообще не понадобится =)) Уже переделал свой код. Правда пока оставил старый вариант чтение из строковых значений с десириализацией в json, но как-только пользователи обновятся, то уберу и его совсем. По идее проблем с кодировками вообще не будет