LINQ to XML работает поверх XmlReader / XmlWriter.XmlReader является реализацией процессора XML / анализатора, как описано в спецификации XML.Эта спецификация в основном говорит, что парсер должен скрыть фактическое представление в тексте из приложения выше.Это означает, что оба \ n и должны быть указаны как одно и то же.Вот что он делает.
XmlWriter это то же самое в обратном направлении.Его цель - сохранить входные данные таким образом, чтобы при разборе вы получили точно то же самое.Таким образом, запись текстового значения "\ n" запишет его так, что синтаксический анализатор сообщит обратно "\ n" (в этом случае выходной текст будет \ n для текстового узла, но для атрибута из-за нормализации, которая происходит в значениях атрибута).Следуя этой идее, попытка записать текстовое значение "" на самом деле выпишет "", потому что когда читатель анализирует, что он вернет оригинал "".
LINQ to XML использует XmlWriter для сохранения дерева в XMLфайл.Таким образом, вы получите описанное выше поведение.
Вы можете записать дерево в XmlWriter самостоятельно (или его частью), и в этом случае вы получите больший контроль.В частности, это позволит вам использовать метод XmlWriter.WriteCharEntity, который заставляет писателя выводить указанный символ в виде символьной сущности, которая находится в $ # xXX;формат.(Обратите внимание, что он будет использовать шестнадцатеричный формат, а не десятичный).