![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Столкнулся со странной проблемой. Создал XmlTextWriter с помощью конструктора для сериализации объекта. Все работало нормально, только текст был не отформатирован. Как работать с этим классом немного подзабыл, но помнил, что есть объект Settings, начал его "мучать, оказалось, что он недоступен для изменения. Потом проблему решил, но до этого, выяснил, что задать собственные настройки можно только создавая экземпляр райтера с помощью метода Create. Все экземпляры, которые я создавал, используя разные перегрузки этого метода, приводили к одному и тому же результату - пустой строке. Здесь хочу заметить, что работал этот объект с тем же самым кодом, в котором экземпляр, созданный с помощью конструктора справился на ура. Что не так с "креэйтом"?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: 1 Всего: 4 |
А где здесь напрямую вызывается конструктор для XmlTextWriter? Возможно, в других классах просто что-то переопределено.
|
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Честно говоря, я твоего ответа не понял. Как этот пример объясняет, почему созданный с помощью конструктора экземпляр работает, а с помощью креэйт - нет? ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: 1 Всего: 4 |
В смысле, что метод Create создаёт, вероятно, другие классы, не XmlTextWriter, а, например, какой-нибудь XmlUtf8RawTextWriter. А в этом классе, вероятно, что-то иначе.
P. S. Не помню уже по какому поводу, но мне как-то раньше доводилось смотреть эти исходники (в смысле класса XmlWriter). |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ilya81, а как это может повлиять на то, что он вообще никакого выхлопа не дает. Ведь как я себе представляю процесс сериализации: сериалайзер получает райтер и вызывает последовательно его методы, попутно передавая ему аргументы. При этом ему по барабану, какой именно подтип ему передали, поскольку он работает с интерфейсом базового класса. Теперь, если экземпляр получен, его методы вызваны, то это должно каким-то образом отобразиться на результате или должно вылететь какое-то исключение в конце концов. К тому же, если я передаю методу креэйт теткстрайтер или стрингбилдер (а я пробовал оба варианта), то мне лично тоже как-то пофиг, какой будет райтер, но текст он просто обязан туда сбросить. Хрен с ним, пусть он будет в другой кодировке или хотя бы выбросит исключение, но он не делает ни того ни другого, а просто возвращает пустую строку. Если бы мой код не работал, с райтером, созданным с помощью конструктора, то я бы на код подумал, но тут хрень какая-то получается.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Для большей наглядности выкладыаю пример.
Присоединённый файл ( Кол-во скачиваний: 2 ) ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Ilya81 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 18.4.2014 Где: ЛО, Всеволожский р-н Репутация: 1 Всего: 4 |
Я-то думал, речь идёт о XmlSerializer'а, а не DataContractSerializer'е - про последний не очень знаю, но так и так - я в таких случаях предпочитаю подключить исходники framework'а и заглянуть в них отладчиком - часто после этого становится понятно.
|
|||
|
||||
diadiavova |
|
||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
А что это меняет? Добавил в код еще и его, тот райтер, который создан с помощью креэйт вывалил исключение, другой - отработал нормально.
Видимо придется. Просто проект не на C# пишется и эта функция там недоступна, но теперь есть на чем колдовать. ![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||||
|
|||||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Ну с исключением справился, благодаря добавлению settings, в котором установил ConformanceLevel.Auto. На датаконтрактсериалайзер это действия не возымело. Ну да ладно.
![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Отформатировал и малость подкрасил вывод и оказалось, что при использовании хмлсериалайзера с райтером, созданным при помощи креэйт, хмл почему-то продублировался, видимо сериалайзер отработал и за себя за своего датаконтракт-собрата. Короче с этим креэйтом точно что-то не так
![]()
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |