Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 2
Регистрация: 21.10.2013
Сообщений: 225

Десериализация XML

24.01.2018, 10:12. Показов 2057. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Добавлено через 27 секунд
Решил(
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2018, 10:12
Ответы с готовыми решениями:

Десериализация XML
есть XML документ, изменить формат не получится <Points> <Point IsRequired="1" X="0" Y="0" Z="0"/> ...

Десериализация XML
Привет. Прошу дать совет, как мне сериализовать такую XML-ку: какой должен быть класс для: <?xml version="1.0"...

Десериализация XML
Нужна помощь в десериализации XML <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"...

11
 Аватар для Sanya_sa
912 / 816 / 333
Регистрация: 03.02.2015
Сообщений: 5,276
Записей в блоге: 9
24.01.2018, 10:13
Не совсем понял сути вопроса, но попробую угадать. Вам скорее всего нужно делать так.

C#
1
2
3
4
5
6
7
8
9
10
11
 public class Prop
    {
        public int Age{ get; set; } = 0;
        public string Name { get; set; } = string.Empty;
 
        public Prop(int age =12, string name= "Alex") 
        {
            Age = age;
            Name = name;
        }
    }
А использовать уже так:

C#
1
2
3
4
5
6
7
List<Prop> PropList = new List<Prop>();
 
...
 
PropList.Add(new Prop(18, "Saha"));
PropList.Add(new Prop(22, "Pety"));
...
Серилизовать сам список нужно.
Если появляются новые свойства, например пол, просто добавляете это свойство в класс Prop.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.01.2018, 10:14
Цитата Сообщение от ToLexx Посмотреть сообщение
Подготовленный к сериализации в XML.
Для сериализации в XML с помощью класса XmlSerializer атрибут Serializable не требуется.

Цитата Сообщение от ToLexx Посмотреть сообщение
Таким образом вопрос как правильно это сделать
Инициализируйте список в конструкторе, чтобы он при создании экземпляра не был null.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.01.2018, 10:15
Стесняюсь спросить, а где вопрос-то ?
0
3 / 3 / 2
Регистрация: 21.10.2013
Сообщений: 225
24.01.2018, 11:05  [ТС]
ЭЭ
Да реально, а вопрос куды делся))

Добавлено через 1 минуту
Мышка глючит, наверно стёр. мляя. Я выделял последний блок для замены))))) Сорь))

Добавлено через 44 минуты
Простите.
Давайте зайдём с другой стороны.
1) Инициализация в коде обязательна? Или можно десериализовать XML файл и уже из него вытащить всё нужное? Допустим такой файл как в 1 XML коде ниже.
2) В каком виде лучше хранить списки в XML файле?
XML файл это фактически текст. Значит запихивать в него надо текст.
Теперь класс, который сериализую: есть строки, даблы, инты и списки даблов и интов. Значит при сериализации я должен их в строки преобразовать(чтобы записать). Простые типы с ними всё понятно, а списки я хотел сделать с помощью разделителей типа :;tab -> строками. Должно получиться как-то так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0"?>
<DeviceParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <IDDevice>1</IDDevice>
  <DeviceType>0</DeviceType>
  <DeviceFreqOut>1</DeviceFreqOut>
  <DeviceCount>1</DeviceCount>
  <DeviceNominalSpeed>6</DeviceNominalSpeed>
  <DeviceProgVersion>1.0.1.1</DeviceProgVersion>
  <DeviceSensingElement>Analog Device</DeviceSensingElement>
  <DeviceTestingDateTime>26 декабря 2017 г.</DeviceTestingDateTime>
  <DeviceTestingCount>12</DeviceTestingCount>
  <DeviceName>  </DeviceName>
  <RotTableTestParam>
    <RTWork>false</RTWork>
    <SINParamFreq>1:5:10:15:20:25:30:35:40:50</SINParamFreq>
    <SINParamAmpl>4:0.8:0.4:0.3:0.2:0.1:0.08:0.05:0.03:0.01</SINParamAmpl>
  </RotTableTestParam>
  <ADCTestParam>
    <ADCWork>false</ADCWork>
    <DeviceColomn>1</DeviceColomn>
    <RotTableColomn>0</RotTableColomn>
    <ADCFreq>10</ADCFreq>
    <ADCOneTestTime>5</ADCOneTestTime>
  </ADCTestParam>
  <ComputeTestData>
    <ApproachSIN_Rho>0:0:0:0:0:0:0:0:0:0</ApproachSIN_Rho>
    <ApproachSIN_M>50:50:50:50:50:50:50:50:50:50</ApproachSIN_M>
    <ApproachAFFH_Rho>0</ApproachAFFH_Rho>
    <ApproachAFFH_M>500</ApproachAFFH_M>
    <AFFH_ratioAmpl>1</AFFH_ratioAmpl>
    <AFFH_deltaT>0.01</AFFH_deltaT>
    <AFFH_phase>13</AFFH_phase>
  </ComputeTestData>
</DeviceParam>
2) Может быть лучше чтобы все свойства класса были строками(списки опять же зафигачить в виде строки с разделителями)??

3) ФАктически вопрос выглядит так как правильнее реализовать все эти свойства, хотя бы на примере 1 свойства(списка).

Добавлено через 48 секунд
Извините, что вопрос улетел.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.01.2018, 11:19
Цитата Сообщение от ToLexx Посмотреть сообщение
1) Инициализация в коде обязательна?
Зависит от кода. Если классы только десериализируются, то инициализировать не надо.

Цитата Сообщение от ToLexx Посмотреть сообщение
2) В каком виде лучше хранить списки в XML файле?
В виде дочерних элементов.

Цитата Сообщение от ToLexx Посмотреть сообщение
XML файл это фактически текст. Значит запихивать в него надо текст.
Логично!!!

Цитата Сообщение от ToLexx Посмотреть сообщение
есть строки, даблы, инты и списки даблов и интов. Значит при сериализации я должен их в строки преобразовать(чтобы записать).
Нет, это за вас сделает сериализатор.
0
3 / 3 / 2
Регистрация: 21.10.2013
Сообщений: 225
24.01.2018, 11:32  [ТС]
Дочерние элементы: Item по отношению к user.
XML
1
2
3
4
5
6
7
8
9
10
11
12
<user>
  <item>
    <fio>А</fio>
    <adress>Й</adress>
    <tell>747</tell>
  </item>
  <item>
    <fio>Б</fio>
    <adress>Ц</adress>
    <tell>8891</tell>
  </item>
</user>
Для меня такое не катит. Каждый XML файл это одно! испытание, для расчётов которого используется список.

Или я чего-то не врубаю с Вашими дочерними элементами(

Добавлено через 3 минуты
Вот так получилось:
XML
1
2
3
4
5
6
7
8
9
10
  <Age>
    <int>1</int>
    <int>2</int>
    <int>3</int>
  </Age>
  <Name>
    <string>Alex</string>
    <string>Rosy</string>
    <string>Villy</string>
  </Name>
Добавлено через 19 секунд
Это имели ввиду?
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.01.2018, 11:33
Цитата Сообщение от ToLexx Посмотреть сообщение
Или я чего-то не врубаю с Вашими дочерними элементами(
У вас item выступает в роли поля списка, т.е. сколько item - столько и строк по сути, а уже в этих строках содержатся fio, adress и tell
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.01.2018, 11:35
Цитата Сообщение от ToLexx Посмотреть сообщение
Для меня такое не катит. Каждый XML файл это одно! испытание, для расчётов которого используется список.
Так распишите полностью задачу, входящие и исходящие данные.
Мы же не телепаты.

Цитата Сообщение от ToLexx Посмотреть сообщение
Или я чего-то не врубаю с Вашими дочерними элементами(
Предполагая, что XML имеет вид, приведенный в вашем предыдущем посте:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
[XmlRoot("DeviceParam")]
public class Device
{
    [XmlElement("IDDevice")]
    public int Id { get; set; }
 
    [XmlElement("DeviceType")]
    public int Type { get; set; }
 
    [XmlElement("DeviceFreqOut")]
    public int FrequencyOut { get; set; }
 
    [XmlElement("DeviceCount")]
    public int Count { get; set; }
 
    [XmlElement("DeviceNominalSpeed")]
    public int NominalSpeed { get; set; }
 
    [XmlElement("DeviceProgVersion")]
    public Version Version { get; set; }
 
    [XmlElement("DeviceSensingElement")]
    public string SensingElement { get; set; }
 
    // Поскольку дата представлена не в стандартном виде, создается дополнительное служебное свойство, которое будет ее приводить в нормальный вид.
    [XmlElement("DeviceTestingDateTime")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    public string TestDateSerialized
    {
        get => TestingDate.ToString("dd MMMM yyyy г.", CultureInfo.GetCultureInfo("ru-RU"));
        set => TestingDate = DateTime.ParseExact(value, "dd MMMM yyyy г.", CultureInfo.GetCultureInfo("ru-RU"));
    }
 
    [XmlIgnore]
    public DateTime TestingDate { get; set; }
 
    [XmlElement("DeviceTestingCount")]
    public int TestCount { get; set; }
 
    [XmlElement("DeviceName")]
    public string Name { get; set; }
 
    [XmlElement("RotTableTestParam")]
    public RotTable TestParams { get; set; }
 
    // Остальные свойства по тому же принципу
}
 
public class RotTable
{
    [XmlElement("RTWork")]
    public bool Work { get; set; }
 
    [XmlElement("SINParamFreq")]
    public string SinParamFrequency { get; set; }
 
    [XmlElement("SINParamAmpl")]
    public string SinParamAmpletude { get; set; }
}
Добавлено через 1 минуту
Десериализация:
C#
1
2
3
4
5
6
Device d;
using (var file = File.OpenRead("input.xml"))
{
   var s = new XmlSerializer(typeof(Device));
   d = s.Deserialize(file) as Device;
}
1
3 / 3 / 2
Регистрация: 21.10.2013
Сообщений: 225
24.01.2018, 11:52  [ТС]
C#
1
2
3
4
[XmlElement("SINParamFreq")] 
public string SinParamFrequency { get; set; } 
[XmlElement("SINParamAmpl")] 
public string SinParamAmpletude { get; set; }
Вот про них вопрос основной. Когда десериализую, получу строку вида "1:2:3:4:5".
Мне же хотелось бы иметь список List<int>.
Но как понимаю, тогда должен быть иной текст в XML файле, а именно такой:
XML
1
2
3
4
5
<SINParamFreq>
<int>1</int>
    <int>2</int>
    <int>3</int>
</SINParamFreq>
И тогда код для него должен быть такой:
C#
1
2
[XmlElement("SINParamFreq")] 
public List<int> SinParamFrequency { get; set; }
Добавлено через 44 секунды
Правильно?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
24.01.2018, 12:02
Лучший ответ Сообщение было отмечено ToLexx как решение

Решение

Цитата Сообщение от ToLexx Посмотреть сообщение
Когда десериализую, получу строку вида "1:2:3:4:5".
Мне же хотелось бы иметь список List<int>.
Проверните тот же фортель, который я сделал с датой:
C#
1
2
3
4
5
6
7
8
9
10
[XmlElement("SINParamFreq")]
[EditorBrowsable(EditorBrowsableState.Never)]
public string SinParamFrequencySerialized
{
    get => string.Join(":", SinParamFrequency ?? Enumerable.Empty<double>());
    set => SinParamFrequency = string.IsNullOrEmpty(value) ? new List<double>() : value.Split(':').Select(double.Parse).ToList();
}
 
[XmlIgnore]
public List<double> SinParamFrequency { get; set; }
2
3 / 3 / 2
Регистрация: 21.10.2013
Сообщений: 225
24.01.2018, 12:07  [ТС]
ППЦ, спс огромное))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2018, 12:07
Помогаю со студенческими работами здесь

Десериализация XML
Есть окошко, которое делает &quot;Вход в систему&quot;. Для входа нужен username, password, они хранятся в xml файле. И нужно десериализовать всю эту...

Десериализация Xml to Object
Добрый день подскажите как десериализовать XmlDocumet . У меня есть XmlDocument &lt;MYPARAM login=&quot;Вася&quot;...

Десериализация XML не срабатывает
Здравствуйте. Столкнулась с такой проблемой: неделю назад благополучно решила вопрос с записью объектов в XML и обратно методами...

Десериализация XML из string
Добрый день, у меня такой вопрос. Необходимо произвести десериализацию xml файла не из файла а из стоки. То есть например...

Десериализация xml документа
Имеется xml файл, который нужно десериализовать с помощью xsd схемы. При помощи xsd-схемы были сгенерированны классы (с помощью xsd.exe)....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru