Как удержать XmlSerializer от уничтожения NewLines в строках?

В этом же случае, но это была ошибка:

Я включил Scrollview с двумя таблицами внутри ViewController (требования к дизайну), в контроллере scrollview я создал программные средства ViewControllers (который содержит TableViews) и я использовал слабый var для его хранения, плохую идею, потому что они были выпущены в конце метода viewDidLoad.

Если вы не видите свой контент таблицы, проверьте, выпущен ли он.

Моя ошибка была очень болезненной для меня, потому что были вызваны все методы (delegate & amp; datasource), кроме viewForCell ...

37
задан Thomas 26 February 2010 в 07:55
поделиться

1 ответ

Это не XmlSerializer, а XmlWriter, который удаляет ваш CR. Чтобы сохранить его, мы должны заставить писателя преобразовать CR в его символьный объект .

XmlWriterSettings ws = new XmlWriterSettings();
ws.NewLineHandling = NewLineHandling.Entitize;

XmlSerializer ser = new XmlSerializer( typeof( Abc ) );
using (XmlWriter wr = XmlWriter.Create( "abc.xml", ws )) {
    ser.Serialize( wr, s );
}

То же самое и с DataContractSerializer:

var ser = new DataContractSerializer( typeof( Abc ) );
using (XmlWriter wr = XmlWriter.Create( "abc.xml", ws )) {
    ser.Serialize( wr, s );
}

Зачем это нужно?

Это потому, что совместимые синтаксические анализаторы XML должны перед синтаксическим анализом преобразовать CRLF и любые CR, за которыми не следует LF, в один LF . Такое поведение определено в разделе Обработка конца строки спецификации XML 1.0.

Поскольку это происходит перед синтаксическим анализом, вам необходимо закодировать CR как его символьную сущность, если вы хотите, чтобы CR существовал в документе.

59
ответ дан 27 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: