James McCullough Ответов: 2

Откуда у вас силы на C# XmlSerializer для отдыха апострофов и кавычек?


У меня есть ситуация, когда клиент требует символы "и", которые должны быть экранированы в XML явно В " и " соответственно. XMLSerializer был написан (по-видимому) с мыслью о том, что, поскольку они не являются строго обязательными в большинстве случаев, они будут игнорировать их. Конечно, я не единственный человек на планете с этой проблемой... Как вы ее решаете? И, пожалуйста, не отвечайте: "в этом нет необходимости." Я это уже знаю. Это требование клиента.

Спасибо за комментарий. Я не заметила, что этот вопрос на самом деле удалил часть моего вопроса. Я хочу "стать" $ quot ; [без пробелов] и "стать" $ apos; [без пробелов].

Что я уже пробовал:

- ручное экранирование символов: глупая система деконструирует их и ускользает от моего амперсанда

- постсериализационный разбор результата: я бы предпочел не делать этого таким образом, я бы хотел, чтобы система выполняла эту работу

- довольно много гуглил: я нашел в основном бессмысленные "ответы", которые говорят: "вам не нужно этого делать". Этого требует мой клиент.

F-ES Sitecore

Если бы ваш клиент потребовал, чтобы вы ходили по воде, вы бы бесконечно гуглили, как это сделать, или просто сказали бы им, что их требование неразумно? Вам нужно управлять клиентом, а не кодом.

James McCullough

Спасибо. Именно такого ответа я и надеялся избежать. Как я уже сказал в вопросе, конечно, я не единственный человек на планете с этой проблемой...

Dave Kreskowiak

Это может быть не требуется стандартом XML, но вместо этого может потребоваться сторонней системе, использующей XML-файл, сохраненный его приложением.

F-ES Sitecore

Тогда он должен это оговорить. "Мой клиент требует этого" заставляет думать, что нет никакой причины, кроме этой, и это не причина. Если вы хотите, чтобы я потратил свое время на решение проблемы для вас, то должна быть уважительная причина.

2 Ответов

Рейтинг:
16

Kornfeld Eliyahu Peter

Я не понимаю, что вы подразумеваете под "escape" (как в C# string \n\r?), но XmlSerializer автоматически преобразует специальные символы в свое значение сущности, иначе это не был бы допустимый XML...

ОБНОВЛЕНИЕ

Вы должны понять (и объяснить клиенту), что кавычки и двойные кавычки являются законными символами в XML, поэтому сериализатор их не трогает...
Единственный вариант, который я вижу, - это написать свой собственный серизлизатор: IXmlSerializable Interface (System.Xml.Serialization)[^]


James McCullough

Обновил вопрос. Извините, я не понял, что система вопросов удалила часть моего первоначального вопроса.

Kornfeld Eliyahu Peter

Я вижу. Обновленный...

James McCullough

Спасибо. Я нашел несколько ссылок на то, чтобы сделать это, но решил спросить Здесь на случай, если мне просто не хватает настройки или чего-то в этом роде. Спасибо за ответ!

Рейтинг:
1

Dave Kreskowiak

Как сказал Питер АП в решении 1, вам придется написать свой собственный сериализатор для обработки требуемых клиентом изменений. Просто погуглите "пользовательский xml-сериализатор C#", и вы найдете множество примеров.