Класс для XmlSerializer - C#
Формулировка задачи:
Здравствуйте, суть задачи. Надо написать класс который описывает xml файл с заданной структурой.
Xml файл имеет структуру
Класс
и метод
Добраться до информации которая находиться во вложенных тегах в теге <System> получается, а вот описать теги в <EventData> не получается.
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> <System> <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /> <EventID>4660</EventID> <Version>0</Version> <Level>0</Level> <Task>12800</Task> <Opcode>0</Opcode> <Keywords>0x8020000000000000</Keywords> <TimeCreated SystemTime="2014-12-17T10:21:58.239809400Z" /> <EventRecordID>249985872</EventRecordID> <Correlation /> <Execution ProcessID="4" ThreadID="8196" /> <Channel>Security</Channel> <Computer>2CSERVER.avangard.karat-e.ru</Computer> <Security /> </System> <EventData> <Data Name="SubjectUserSid">S-1-5-21-91203979-249081657-904295806-6183</Data> <Data Name="SubjectUserName">UserName</Data> <Data Name="SubjectDomainName">AVANGARD</Data> <Data Name="SubjectLogonId">0x900b919</Data> <Data Name="ObjectServer">Security</Data> <Data Name="HandleId">0x44a4</Data> <Data Name="ProcessId">0x4</Data> <Data Name="ProcessName"> </Data> <Data Name="TransactionId">{00000000-0000-0000-0000-000000000000}</Data> </EventData> </Event>
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics.Eventing.Reader; using System.Security; using System.Xml; using System.Xml.Serialization; using System.IO; using System.Reflection; namespace Events3 { // Хорошая попытка была [XmlRoot(ElementName = "Event", Namespace = "http://schemas.microsoft.com/win/2004/08/events/event")] public class Event { [XmlElement(ElementName = "System")] public System System; [XmlElement(ElementName="EventData")] public EventData EventData; } public class System { [XmlElement(ElementName = "EventID")] public int EventID; [XmlElement(ElementName="EventRecordID")] public double EventRecordID; } public class EventData { [XmlElement(ElementName = "Data")] public Data[] Data; } public class Data { [XmlAttribute(AttributeName = "Name")] public string Name; [XmlElement(ElementName = "Data")] public string Dt; public string name { get { return Name; } set { Name = value; } } }
public void ReadDocument(string filename) { XmlSerializer serializer = new XmlSerializer(typeof(Event)); FileStream fs = new FileStream(filename, FileMode.Open); Event ev; ev = (Event)serializer.Deserialize(fs); fs.Close(); Console.Write(ev.System.EventID + "\n"); Console.Write(ev.System.EventRecordID + "\n"); // Console.Write(ev.EventData.Data + "\n"); Data[] Dts = ev.EventData.Data; foreach (Data dt in Dts) { Console.WriteLine(ev.EventData.Data + "\n"); } }
Решение задачи: «Класс для XmlSerializer»
textual
Листинг программы
XmlSerializer serializer = new XmlSerializer(typeof(EventElement)); EventElement ev; using (FileStream fs = new FileStream(filename, FileMode.Open)) { ev = (EventElement)serializer.Deserialize(fs); } Console.WriteLine(ev.System.EventId); Console.WriteLine(ev.System.EventRecordId); foreach (DataElement dt in ev.EventData) { Console.WriteLine("{0} = {1}", dt.Name, dt.Value); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д