从 Windows 事件查看器我可以获得以下 xml 结构:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="XXXXXXXXXX" Guid="{YYYYYYYY}" />
<EventID>XYZ</EventID>
<Version>0</Version>
<Level>L</Level>
<Task>A</Task>
<Opcode>0</Opcode>
<Keywords>0x000xyzh</Keywords>
<TimeCreated SystemTime="2012-06-28T15:44:04.997837000Z" />
<EventRecordID>153</EventRecordID>
<Correlation ActivityID="{DDDDDDDDD}" />
<Execution ProcessID="199999" ThreadID="90990" />
<Channel>Microsoft-Windows-ABCDEFG/Admin</Channel>
<Computer>myPC</Computer>
<Security UserID="ABCABC" />
</System>
<EventData>
<Data Name="name1">data1</Data>
<Data Name="name2">data2</Data>
<Data Name="name3">data3</Data>
</EventData>
<RenderingInfo Culture="en-US">
<Message>some message </Message>
<Level>Information</Level>
<Task>XYZ</Task>
<Opcode>Info</Opcode>
<Channel />
<Provider />
<Keywords>
<Keyword>XYZ</Keyword>
</Keywords>
</RenderingInfo>
</Event>
我只对 xml 的 EventData 部分感兴趣。我创建了以下非常简单的类:
public class Event
{
public EventData EventData;
}
public class EventData
{
public String[] Data;
}
然后我使用下面的代码:
XmlSerializer serializer = new XmlSerializer(typeof(Event));
StringReader reader = new StringReader(evtXml);
evt = (Event)serializer.Deserialize(reader);
但是在第一行代码中,我得到了以下错误:
XML 文档 (1, 2) 中存在错误。
这个错误对我来说没有意义。问题是我没有类中的所有字段,还是我需要一些其他类(XmlSerializer 除外)来从中获取数据。我想要 EventData 下的数据的方式是按名称和数据值(例如 name1 和 data1)...等等
重要编辑: 我得到的 xml 是由 ToXML() 生成的EventRecord 的方法类
谢谢
最佳答案
XmlSerializer serializer = new XmlSerializer(typeof(Event),
"http://schemas.microsoft.com/win/2004/08/events/event");
StringReader reader = new StringReader(evtXml);
var evt = (Event)serializer.Deserialize(reader);
public class Event
{
public Data[] EventData;
}
public class Data
{
[XmlAttribute]
public string Name;
[XmlText]
public string Value;
}
关于c# - 将 XML 字符串反序列化为对象错误 : There is an Error in xml document (1, 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11250992/