Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325

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

02.04.2018, 13:43. Показов 4326. Ответов 13

Студворк — интернет-сервис помощи студентам
Коллеги, помогите десериализовать данные
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<Body>
  <Данные>
    <Отдел Наименование="Штаб-квартира ЦРУ" Город="Москва"  >
      <Сотрудники>
        <Сотрудник ПолноеИмя="Иванов Иван Иванович" Возраст ="67" Уволен="Нет" Дата="19.11.2011"/>
        <Сотрудник ПолноеИмя="Иванов Кирилл Иванович" Возраст ="47" Уволен="Да" Дата="19.12.2011"/>
      </Сотрудники>
    </Отдел>
    <Отдел Наименование="Штаб-квартира ФБР" Город="Москва" >
      <Сотрудники>
        <Сотрудник ПолноеИмя="Петров Петр Иванович" Возраст ="37" Уволен="Нет" Дата="19.13.2012"/>
      </Сотрудники>
    </Отдел>
  </Данные>
</Body>
Добавлено через 2 минуты
Упаковать бы все в класс "Данные", да не соображу как с такой структурой xml это сделать

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

XML десериализация
Здравствуйте, помогите пожалуйста разобраться. &lt;?xml version=&quot;1.0&quot; encoding=&quot;koi8-r&quot;?&gt; &lt;span&gt; &lt;li id=&quot;8120&quot;&gt;...

Десериализация XML
Пытаюсь десереализировать XML структуру, но или получаю неверное соответствие значений или не получаю ничего. Подскажить на каком моменте...

Десериализация даты из XML
Доброго времени суток, коллеги. Столкнулся с проблемой десериализации данных. Суть проблемы: есть некоторый веб-сервис написанный на жабе....

13
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 14:04
Лучший ответ Сообщение было отмечено UseMuse как решение

Решение

Цитата Сообщение от UseMuse Посмотреть сообщение
unreal
Нет ничего проще. Добавляешь в проект файл с кодом программы, копируешь XML в буфер, выбираешь меню Правка-Специальная вставка-Вставить 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// Примечание. Для запуска созданного кода может потребоваться NET Framework версии 4.5 или более поздней версии и .NET Core или Standard версии 2.0 или более поздней.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class Body
{
 
    private BodyОтдел[] данныеField;
 
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("Отдел", IsNullable = false)]
    public BodyОтдел[] Данные
    {
        get
        {
            return this.данныеField;
        }
        set
        {
            this.данныеField = value;
        }
    }
}
 
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class BodyОтдел
{
 
    private BodyОтделСотрудник[] сотрудникиField;
 
    private string наименованиеField;
 
    private string городField;
 
    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("Сотрудник", IsNullable = false)]
    public BodyОтделСотрудник[] Сотрудники
    {
        get
        {
            return this.сотрудникиField;
        }
        set
        {
            this.сотрудникиField = value;
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Наименование
    {
        get
        {
            return this.наименованиеField;
        }
        set
        {
            this.наименованиеField = value;
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Город
    {
        get
        {
            return this.городField;
        }
        set
        {
            this.городField = value;
        }
    }
}
 
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class BodyОтделСотрудник
{
 
    private string полноеИмяField;
 
    private byte возрастField;
 
    private string уволенField;
 
    private string датаField;
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string ПолноеИмя
    {
        get
        {
            return this.полноеИмяField;
        }
        set
        {
            this.полноеИмяField = value;
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public byte Возраст
    {
        get
        {
            return this.возрастField;
        }
        set
        {
            this.возрастField = value;
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Уволен
    {
        get
        {
            return this.уволенField;
        }
        set
        {
            this.уволенField = value;
        }
    }
 
    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Дата
    {
        get
        {
            return this.датаField;
        }
        set
        {
            this.датаField = value;
        }
    }
}
1
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.04.2018, 14:56  [ТС]
diadiavova, спасибо!)
Скажи пожалуйста, если ли способ для атрибутов : ПолноеИмя="Иванов Иван Иванович" Возраст ="67" создать отдельный класс допустим
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
/// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class ПерсональныеДанные
    {
        private string полноеИмяField;
 
        private byte возрастField;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string ПолноеИмя
        {
            get
            {
                return this.полноеИмяField;
            }
            set
            {
                this.полноеИмяField = value;
            }
        }
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public byte Возраст
        {
            get
            {
                return this.возрастField;
            }
            set
            {
                this.возрастField = value;
            }
        }
    }
а в классе BodyОтделСотрудник за место свойств ПолноеИмя и Возраст, создать свойство типа ПерсональныеДанные
?

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
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class BodyОтделСотрудник
{
/*
private string полноеИмяField;
private byte возрастField;[/quote]
*/
  public ПерсональныеДанные персональныеДанные;
 
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public ПерсональныеДанные ПерсональныеДанные
        {
            get
            {
                return this.персональныеДанные;
            }
            set
            {
                this.персональныеДанные = value;
            }
        }
....
Добавлено через 1 минуту
как это все валидно обыграть чтобы работало, если такое вообще возможно

Добавлено через 3 минуты
кажется я что-то не то пишу... мысли в сторону того, чтобы на экземпляре свойства получать доступ к Полному имени и возрасту, в дальнейшем я туда допишу его дату рождения и еще какие-нибудь персональные данные
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 15:03
UseMuse, в смысле тебе нужно, чтобы часть атрибутов элемента объединить в отдельный класс, а остальные атрибуты оставить как есть? Я думаю вряд ли. В принципе, если у тебя есть собственные требования к структуре классов и это сильно отличается от структуры документа, то можно перед десериализацией трансформировать документ, например с помощью XSLT. Либо извлекать данные при помощи средств работы с XML.

Добавлено через 1 минуту
Цитата Сообщение от UseMuse Посмотреть сообщение
кажется я что-то не то пишу... мысли в сторону того, чтобы на экземпляре свойства получать доступ к Полному имени и возрасту, в дальнейшем я туда допишу его дату рождения и еще какие-нибудь персональные данные
Ну так для этого же совсем не обязательно выделять некоторые атрибуты в отдельный класс. Ты можешь дописать в класс Сотрудник нужные свойства и дальше работать с ними.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.04.2018, 15:22  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
в смысле тебе нужно, чтобы часть атрибутов элемента объединить в отдельный класс, а остальные атрибуты оставить как есть? Я думаю вряд ли.
да, я это хочу провернуть)

Добавлено через 13 минут
diadiavova, что-то не работает

Получаю ошибку, хотя документ валиден

{"В документе XML (2, 2) присутствует ошибка."}
{"<Message xmlns='http://v8.1c.ru/messages'> не ожидался."}

если удаляю заголовки в xml эти и оставляю только блок с данными, то все свойства = null
Body
{

private BodyОтдел[] данныеField;
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 15:34
Цитата Сообщение от UseMuse Посмотреть сообщение
{"В документе XML (2, 2) присутствует ошибка."}
{"<Message xmlns='http://v8.1c.ru/messages'> не ожидался."}
Ну так в том документе, который ты привел сначала, и нет такого кода. Почему тебя удивляет, что он там не ожидался? Классы созданы под тот документ, а ты пытаешься подсунуть какой-то другой.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.04.2018, 15:57  [ТС]
diadiavova, потому что думал что иерархия будет не важна)
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
<?xml version="1.0" encoding="utf-8"?>
<v8msg:Message xmlns:v8msg="http://v8.1c.ru/messages">
  <v8msg:Header>
    <v8msg:ExchangePlan></v8msg:ExchangePlan>
    <v8msg:To></v8msg:To>
    <v8msg:From></v8msg:From>
    <v8msg:MessageNo></v8msg:MessageNo>
    <v8msg:ReceivedNo></v8msg:ReceivedNo>
  </v8msg:Header>
  <v8msg:Body>
  <ДанныеРаз>
  </ДанныеРаз>
  <Данные>
    <Отдел Наименование="Штаб-квартира ЦРУ" Город="Москва"  >
      <Сотрудники>
        <Сотрудник ПолноеИмя="Иванов Иван Иванович" Возраст ="67" Уволен="Нет" Дата="19.11.2011"/>
        <Сотрудник ПолноеИмя="Иванов Кирилл Иванович" Возраст ="47" Уволен="Да" Дата="19.12.2011"/>
      </Сотрудники>
    </Отдел>
    <Отдел Наименование="Штаб-квартира ФБР" Город="Москва" >
      <Сотрудники>
        <Сотрудник ПолноеИмя="Петров Петр Иванович" Возраст ="37" Уволен="Нет" Дата="19.13.2012"/>
      </Сотрудники>
    </Отдел>
  </Данные>
  <ДанныеДва>
  </ДанныеДва>
  </v8msg:Body>
</v8msg:Message>
Добавлено через 3 минуты
diadiavova, я так понимаю для всех родительских узлов перед v8msg:Body нужно создать класс, чтобы это все
десериализовать?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 16:57
Цитата Сообщение от UseMuse Посмотреть сообщение
я так понимаю для всех родительских узлов перед v8msg:Body нужно создать класс, чтобы это все
десериализовать?
Создай для документа автоматически и не парься.
1
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.04.2018, 17:07  [ТС]
diadiavova, не понимаю о чем ты, это как?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 17:33
UseMuse, Мой первый пост перечитай, я там описал как сформировать классы средствами студии.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
02.04.2018, 17:44  [ТС]
Цитата Сообщение от diadiavova Посмотреть сообщение
Добавляешь в проект файл с кодом программы
с каким кодом программы?)
Цитата Сообщение от diadiavova Посмотреть сообщение
копируешь XML в буфер
в буфер это в файл всмысле?
Цитата Сообщение от diadiavova Посмотреть сообщение
Правка-Специальная вставка-Вставить XML как классы
у меня нет такого

Добавлено через 1 минуту
получилось)
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
02.04.2018, 17:50
Цитата Сообщение от UseMuse Посмотреть сообщение
с каким кодом программы?)
Функцию "Создать элемент" для проекта знаешь? Там открывается диалог выбора шаблонов элементов. В левой части выбираешь раздел "Код", в правой найдешь шаблон "Файл с текстом программы". Не принципиально, можно класс добавить и заменить его код.
Цитата Сообщение от UseMuse Посмотреть сообщение
в буфер это в файл всмысле?
Системный буфер обмена. Открываешь свой хмл в редакторе, выделяешь все ( Ctrl+A) и копируешь (Ctrl+С).
Цитата Сообщение от UseMuse Посмотреть сообщение
у меня нет такого
Здрасте.
Цитата Сообщение от UseMuse Посмотреть сообщение
получилось
Интересно, как это тебе удалось )))
1
3 / 3 / 0
Регистрация: 02.03.2018
Сообщений: 37
03.04.2018, 15:58
diadiavova,
Цитата Сообщение от diadiavova Посмотреть сообщение
Ну так в том документе, который ты привел сначала, и нет такого кода. Почему тебя удивляет, что он там не ожидался? Классы созданы под тот документ, а ты пытаешься подсунуть какой-то другой.
ТС шифровался, что с 1С работает)
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
03.04.2018, 16:55  [ТС]
Code-Monstr, не, просто структуру для примера проще дал, чтобы было проще работать, если бы я шифровался, то не привел бы затем полную структуру документа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2018, 16:55
Помогаю со студенческими работами здесь

Десериализация XML с xsi:type
Всем доброго времени суток. Не получается десериализовать xml такого вида: &lt;ns11:root xmlns:ns11=&quot;namespace11&quot;...

Десериализация пустых тегов xml
Здравствуйте. Недавно вплотную занялся десериализацией. Использую System.Xml.Serialization; Столкнулся с проблемой: некоторые тэги в...

XML Десериализация ComboBox.ObjectCollection
Здравствуйте! Требуется все данные, находящие в комбо-боксе сохранять, а при запуске программы загружать из файла. Пишу. ...

Сериализация/Десериализация списка объектов в XML
имеется базовый класс Figure using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Десериализация XML файла с многократной вложенностью
Здравствуйте. Возникла следующая проблема. Есть XML файл с ограниченным количеством типовых блоков. Например в файле ниже может...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru