Класс для 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);
}