Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
добрый тапкожуй
11 / 11 / 3
Регистрация: 30.11.2011
Сообщений: 76
1

Сериализация List<string> без переноса строк

11.10.2012, 13:56. Просмотров 1445. Ответов 7
Метки нет (Все метки)

Есть класс SettingsList. Мне нужно сериализовать такое вот поле класса:
C#
1
private List<string> serviceToDelete = new List<string>();

Я создаю для этого поля свойство и помечаю свойство тэгом [XmlElement]:
C#
1
2
3
4
5
6
[XmlElement]
        public List<string> ServiceToDelete
        {
            get { return serviceToDelete; }
            set { serviceToDelete = value; }
        }
Создаю публичный открытый конструктор, создаю экземпляр класса SettingsList, добавляю в поле serviceToDelete этого класса несколько текстовых значений и пробую сериализовать экземпляр класса вот так:
C#
1
2
3
4
XmlWriter writer = new XmlTextWriter(Directory.GetCurrentDirectory() + "\\Settings.xml", System.Text.Encoding.UTF8);
            XmlSerializer serializer = new XmlSerializer(typeof(SettingsList));
            serializer.Serialize(writer, this);
            writer.Close();
Получается такое:
XML
1
2
3
4
5
6
7
8
<SettingsList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ServiceToDelete>
Service1
</ServiceToDelete>
<ServiceToDelete>
Service2
</ServiceToDelete>
</SettingsList>
Как нужно сериализовать, чтобы получить такое:
XML
1
2
3
4
<SettingsList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ServiceToDelete>Service1</ServiceToDelete>
<ServiceToDelete>Service2</ServiceToDelete>
</SettingsList>
?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 13:56
Ответы с готовыми решениями:

List<string, string, string> есть ли в C# что-то подобное?
Мне надо добавить в List не только имя файла, но и некоторые строки из этого файла. Т.е. например,...

Самописная сериализация List<>
Пишу свой сериализатор. Дохожу до свойства List&lt;ClassName&gt;. Как мне узнать что это именно List&lt;&gt; ?...

Сериализация коллекции List<>
У меня вопрос: soap и xml сериализации работают с коллекциями? У меня вот такой код public class...

Сериализация List<T> в строку, а не в файл
XmlSerializer XmlS = new XmlSerializer(typeof(List&lt;ListTest&gt;)); TextWriter tx = new...

List<string> C#
как реализовать быстрое сохранение списка строк? имеется список из примерно 90 строк (может быть...

7
kolorotur
Эксперт .NET
12352 / 9829 / 2528
Регистрация: 17.09.2011
Сообщений: 16,709
Завершенные тесты: 1
11.10.2012, 14:37 2
Он по умолчанию сериализирует так, как вам надо.
Скорее всего у вас в начале и в конце каждого элемента списка стоит перенос строки - вот он и сериализируется.
C#
1
2
foreach (var service in ServiceToDelete)
   Console.WriteLine("|{0}|", service);
И посмотрите на вывод. Если вертикальные черточки остаются на других строчках, то мое предположение верно.
1
добрый тапкожуй
11 / 11 / 3
Регистрация: 30.11.2011
Сообщений: 76
16.10.2012, 12:04  [ТС] 3
проект не консольный, поэтому делал так:
C#
1
2
3
4
            foreach(string s in ServiceToDelete)
            {
                File.AppendAllText("log.txt","|"+s+"|");
            }
В файле получаю одну строку, а не несколько. В чем еще может быть дело?

Не по теме:


а почему

C#
1
var service in ServiceToDelete
лучше, чем
C#
1
string s in ServiceToDelete
?

Я знаю, что первое - это динамическое определение типов, но оно же по идее делается "на лету" и поэтому тратит больше ресурсов..

0
Savvy
122 / 120 / 6
Регистрация: 21.12.2011
Сообщений: 348
16.10.2012, 12:16 4
добрый тапкожуй, вы путаете dynamic с var. var - определяет тип во время компиляции, соотв. влиять на производительность не может. dynamic - определяет тип во время выполения, там могут быть потери, но его использование оправдывает затраты.
1
16.10.2012, 12:16
добрый тапкожуй
11 / 11 / 3
Регистрация: 30.11.2011
Сообщений: 76
17.10.2012, 11:19  [ТС] 5
Savvy, спасибо, понял свою ошибку. Погуглил, разобрался. Вопрос про сериализацию все еще актуален

Добавлено через 1 час 15 минут
Странно.. открываю свой XML через оперу - каждый элемент списка с переносами. Открываю через эксплорер - каждый элемент списка без пересносов, так, как мне нужно. Видимо, дело было в настройках браузера
0
turbanoff
Эксперт Java
4048 / 3783 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
17.10.2012, 16:51 6
Opera переформатирует xml для большей наглядности.
А вообще зачем вы открываете xml, т.е. текстовые файлы, в браузере? Для этого есть более подходящие редакторы, например notepad++.
1
добрый тапкожуй
11 / 11 / 3
Регистрация: 30.11.2011
Сообщений: 76
18.10.2012, 12:14  [ТС] 7
Никогда раньше не имел дела ни с сериализацией, ни с XML. Знал, что XML можно открыть и через браузер, и через блокнот, но в блокноте ничего не понятно, потому что форматирования нет. Вот и открывал через браузер
0
Savvy
122 / 120 / 6
Регистрация: 21.12.2011
Сообщений: 348
18.10.2012, 14:14 8
добрый тапкожуй, браузер пропускает xml через свой движок, поэтому то что ты видишь в нем, это не оригинальный xml файл.
юзай notepad++.
1
18.10.2012, 14:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 14:14

Бинарная сериализация класса без подписчиков на его событие
Здравствуйте. Продемонстрирую проблему на упрощенном примере. Есть класс EventingClass, у...

Элемент управления для List<String>
Привет! Какой элемент управления есть в НЕТ для управления списком строк. Чтобы можно было...

Объединение двух списков List<string>
Есть 2 списка Schedule И Changes. В каждом есть несколько элементов вида №. Lesson Group|Cab...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.