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

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

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

Здравствуйте, суть задачи. Надо написать класс который описывает xml файл с заданной структурой. Xml файл имеет структуру
<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");
            }
        }
Добраться до информации которая находиться во вложенных тегах в теге <System> получается, а вот описать теги в <EventData> не получается.

Решение задачи: «Класс для 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);
}

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


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

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

8   голосов , оценка 4.5 из 5
Похожие ответы