Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 39

Deserialize xmldocument

21.03.2018, 01:28. Показов 2114. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане) У меня к вам следующий вопрос:

есть xml файл

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
<?xml version="1.0" encoding="utf-8" ?>
<message_v1 int_id="XXXXXXXXXXXXXXXX" time="YYYY-MM-DDTHH:MM:SS+05:00" type="response">
  <data trn_code="R0101">
    <statement_response_v1>
      <end_date>YYYY-MM-DDTHH:MM:SS+05:00</end_date>
      <start_date>YYYY-MM-DDTHH:MM:SS+05:00</start_date>
      <saldo_in value_type="float">0</saldo_in>
      <saldo_in_national value_type="float">0</saldo_in_national>
      <saldo_out value_type="float">85220.95</saldo_out>
      <saldo_out_national value_type="float">0</saldo_out_national>
       ...
<days>
        
        <day date="YYYY-MM-DDTHH:MM:SS+05:00" day_saldo_in="0" day_saldo_in_national="0" day_saldo_out="15767.52" day_saldo_out_national="0" day_turn_over_dt="0" day_turn_over_dt_national="0" day_turn_over_kt="15767.52" day_turn_over_kt_national="0">
          <records>
            <record core_banking_id="1;391512222"/>
            <record core_banking_id="1;391512222"/>
          </records>
        </day>
 
<day date="YYYY-MM-DDTHH:MM:SS+05:00" day_saldo_in="0" day_saldo_in_national="0" day_saldo_out="15767.52" day_saldo_out_national="0" day_turn_over_dt="0" day_turn_over_dt_national="0" day_turn_over_kt="15767.52" day_turn_over_kt_national="0">
          <records>
            <record core_banking_id="1;391512222"/>
            <record core_banking_id="1;391512222"/>
          </records>
        </day>
      </days>
      </statement_response_v1>
  </data>
  <state_info state="accepted"/>
</message_v1>

Имеются Models

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
    [Serializable()]
    [XmlRoot("message_v1")]
    public class Payments {
 
        [XmlElement("data")]
 
        [XmlArray("days")]
        [XmlArrayItem("day", typeof(Day))]
        public Day[] Days { get; set; }
    }
 
namespace ConsoleApp11
{
    [Serializable()]
    public class Day
    {
        [System.Xml.Serialization.XmlAttribute("date")]
        public string date { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_saldo_in")]
        public string day_saldo_in { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_saldo_in_national")]
        public string day_saldo_in_national { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_saldo_out")]
        public string day_saldo_out { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_saldo_out_national")]
        public string day_saldo_out_national { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_turn_over_dt")]
        public string day_turn_over_dt { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_turn_over_dt_national")]
        public string day_turn_over_dt_national { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_turn_over_kt")]
        public string day_turn_over_kt { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("day_turn_over_kt_national")]
        public string day_turn_over_kt_national { get; set; }
 
        [XmlArray("records")]
        [XmlArrayItem("record", typeof(Record))]
        public Record[] Records { get; set; }
    }
}
 
 
Serializable()]
    public class Record
    {
        [System.Xml.Serialization.XmlAttribute("core_banking_id")]
        public string core_banking_id { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("debit")]
        public string debit { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("document_type")]
        public string document_type { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("number")]
        public string number { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("origin_date")]
        public string origin_date { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("priority")]
        public string priority { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("purpose")]
        public string purpose { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("related_account")]
        public string related_account { get; set;}
 
        [System.Xml.Serialization.XmlAttribute("related_bank_code")]
        public string related_bank_code { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("related_bank_name")]
        public string related_bank_name { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("related_name")]
        public string related_name { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("related_tax_id")]
        public string related_tax_id { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("related_tax_reason_code")]
        public string related_tax_reason_code { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("sum")]
        public string sum { get; set; }
 
        [System.Xml.Serialization.XmlAttribute("sum_national")]
        public string sum_national { get; set; }
    }

Нужно получить список дней со списком records. Как правильно делать десериализацию при многоуровневом файле?

Пробовал делать так
Payments payments = null;
C#
1
2
3
4
5
6
7
8
9
            string path = "XMLFile1.xml";
            
            XmlSerializer serializer = new XmlSerializer(typeof(Payments));
 
            StreamReader reader = new StreamReader(path);
            payments = (Payments)serializer.Deserialize(reader);
            
            reader.Close();
            Console.ReadKey();
Но paymnets=null.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2018, 01:28
Ответы с готовыми решениями:

Deserialize данных данного вида
Как провести десериализацию данного текста? Помогите) ...

Xml deserialize удаление строк
Как можно прочитать файл и после чтения удалить нужные строки по id и записать файл уже без них?

[Serialization/Deserialize]Не удалось найти сборку
Написал структуры для хранения информации после чего забив инфу я я её серилизовал и записал в бинарный. через некоторое время мне...

2
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.03.2018, 09:38
rad1996, у вас иерархия классов не соответствует иерархии элементов в файле.
В ваших классах массив Days объявлен непосредственно в классе Payments, который представляет элемент message_v1, а в файле элементы days находятся в message_v1/data/statement_response_v1
Наверное, классы нужно изменить следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[XmlRoot("message_v1")]
public class Payments
{
    [XmlElement("data")]
    public Data Data { get; set; }
}
 
public class Data
{
    [XmlElement("statement_response_v1")]
    public Statement Statement { get; set; }
}
 
public class Statement 
{
    [XmlArray("days")]
    [XmlArrayItem("day", typeof(Day))]
    public Day[] Days { get; set; }
}
P.S. Для XML-сериализации нет необходимости помечать классы атрибутом Serializable.
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 39
21.03.2018, 13:12  [ТС]
Спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2018, 13:12
Помогаю со студенческими работами здесь

XmlDocument в строку
Как преобразовать XMLDocument в строку?

XmlDocument пропускает данные
Есть у меня парсер xml документа на XmlDocument. Вроде нормально находит данные и выводить их, но я заметил что некоторые строки в xml он...

XMLDocument и русский язык
Написал кусок кода который с ХML заполняет Menustrip. private void BuildMenuStrip() { XmlDocument...

XmlDocument против Dictionary и List
Сразу к сути: В классе используются var dic = new Dictionary&lt;string, Dictionary&lt;string, int&gt;&gt;(); var dic2 = new...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru