Класс для XmlSerializer - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, суть задачи. Надо написать класс который описывает xml файл с заданной структурой. Xml файл имеет структуру
Листинг программы
  1. <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  2. <System>
  3. <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
  4. <EventID>4660</EventID>
  5. <Version>0</Version>
  6. <Level>0</Level>
  7. <Task>12800</Task>
  8. <Opcode>0</Opcode>
  9. <Keywords>0x8020000000000000</Keywords>
  10. <TimeCreated SystemTime="2014-12-17T10:21:58.239809400Z" />
  11. <EventRecordID>249985872</EventRecordID>
  12. <Correlation />
  13. <Execution ProcessID="4" ThreadID="8196" />
  14. <Channel>Security</Channel>
  15. <Computer>2CSERVER.avangard.karat-e.ru</Computer>
  16. <Security />
  17. </System>
  18. <EventData>
  19. <Data Name="SubjectUserSid">S-1-5-21-91203979-249081657-904295806-6183</Data>
  20. <Data Name="SubjectUserName">UserName</Data>
  21. <Data Name="SubjectDomainName">AVANGARD</Data>
  22. <Data Name="SubjectLogonId">0x900b919</Data>
  23. <Data Name="ObjectServer">Security</Data>
  24. <Data Name="HandleId">0x44a4</Data>
  25. <Data Name="ProcessId">0x4</Data>
  26. <Data Name="ProcessName">
  27. </Data>
  28. <Data Name="TransactionId">{00000000-0000-0000-0000-000000000000}</Data>
  29. </EventData>
  30. </Event>
Класс
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Diagnostics.Eventing.Reader;
  7. using System.Security;
  8. using System.Xml;
  9. using System.Xml.Serialization;
  10. using System.IO;
  11. using System.Reflection;
  12. namespace Events3
  13. {
  14. // Хорошая попытка была
  15. [XmlRoot(ElementName = "Event", Namespace = "http://schemas.microsoft.com/win/2004/08/events/event")]
  16. public class Event
  17. {
  18. [XmlElement(ElementName = "System")]
  19. public System System;
  20. [XmlElement(ElementName="EventData")]
  21. public EventData EventData;
  22. }
  23. public class System
  24. {
  25. [XmlElement(ElementName = "EventID")]
  26. public int EventID;
  27. [XmlElement(ElementName="EventRecordID")]
  28. public double EventRecordID;
  29. }
  30. public class EventData
  31. {
  32. [XmlElement(ElementName = "Data")]
  33. public Data[] Data;
  34.  
  35. }
  36.  
  37. public class Data
  38. {
  39. [XmlAttribute(AttributeName = "Name")]
  40. public string Name;
  41. [XmlElement(ElementName = "Data")]
  42. public string Dt;
  43. public string name
  44. {
  45. get { return Name; }
  46. set { Name = value; }
  47. }
  48. }
и метод
Листинг программы
  1. public void ReadDocument(string filename)
  2. {
  3. XmlSerializer serializer = new XmlSerializer(typeof(Event));
  4. FileStream fs = new FileStream(filename, FileMode.Open);
  5. Event ev;
  6. ev = (Event)serializer.Deserialize(fs);
  7. fs.Close();
  8. Console.Write(ev.System.EventID + "\n");
  9. Console.Write(ev.System.EventRecordID + "\n");
  10. // Console.Write(ev.EventData.Data + "\n");
  11. Data[] Dts = ev.EventData.Data;
  12. foreach (Data dt in Dts)
  13. {
  14. Console.WriteLine(ev.EventData.Data + "\n");
  15. }
  16. }
Добраться до информации которая находиться во вложенных тегах в теге <System> получается, а вот описать теги в <EventData> не получается.

Решение задачи: «Класс для XmlSerializer»

textual
Листинг программы
  1. XmlSerializer serializer = new XmlSerializer(typeof(EventElement));
  2. EventElement ev;
  3. using (FileStream fs = new FileStream(filename, FileMode.Open))
  4. {
  5.     ev = (EventElement)serializer.Deserialize(fs);
  6. }
  7. Console.WriteLine(ev.System.EventId);
  8. Console.WriteLine(ev.System.EventRecordId);
  9. foreach (DataElement dt in ev.EventData)
  10. {
  11.     Console.WriteLine("{0} = {1}",  dt.Name, dt.Value);
  12. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы