将XMLstring反序列化为对象错误:xml文档中存在错误(1,2)

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部分感兴趣。 我创build了以下非常简单的类:

  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); 

但在代码的第一行,我得到以下错误:

There is an error in XML document (1, 2).

这个错误对我来说不是信息。 问题是我没有在类中的所有字段,或者我需要一些其他类(除了XmlSerializer)来从中获取数据。 我想在EventData下的数据的方式是名称和数据值(例如name1与data1)…等

重要编辑 :我得到的XML是由EventRecord类的ToXML()方法生成的

谢谢

Solutions Collecting From Web of "将XMLstring反序列化为对象错误:xml文档中存在错误(1,2)"

 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; } 

XmlSerializer经常告诉你什么是遮罩; 添加一些错误处理,具体为:

 try { // your code } catch(Exception ex) { while(ex != null) { Console.WriteLine(ex.Message); ex = ex.InnerException; } } 

这是一个命名空间问题; 尝试:

 [XmlRoot("Event", Namespace="http://schemas.microsoft.com/win/2004/08/events/event")] public class Event {...}