2012-06-28 26 views
7

Windows ईवेंट व्यूअर से मैं निम्नलिखित XML संरचना प्राप्त कर सकते हैं:deserialize एक्सएमएल स्ट्रिंग त्रुटि वस्तु के लिए: XML दस्तावेज में कोई त्रुटि है (1,2)

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

मैं केवल के 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); 

लेकिन कोड की पहली पंक्ति पर, मैं निम्नलिखित त्रुटि मिलती है:

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

यह त्रुटि मुझे जानकारीपूर्ण नहीं है। क्या समस्या है कि मेरे पास कक्षाओं में सभी फ़ील्ड नहीं हैं या मुझे डेटा प्राप्त करने के लिए कुछ अन्य वर्ग (XmlSerializer के अलावा) की आवश्यकता है। जिस तरह से मैं EventData तहत डेटा चाहते हैं नाम और डेटा मान (जैसे data1 साथ name1) के द्वारा होता है ... आदि

महत्वपूर्ण संपादित: एक्सएमएल मैं हो रही है की ToXML() विधि द्वारा उत्पन्न होता है EventRecord वर्ग

धन्यवाद

+2

खैर XML दस्तावेज़ * * मान्य नहीं है - 'Message' टैग को देखने के:' कुछ संदेश '। यदि यह आपका असली एक्सएमएल नहीं है, तो कृपया एक्सएमएल का एक छोटा लेकिन पूरा टुकड़ा शामिल करें जो एक ही समस्या का प्रदर्शन करता है। –

+0

@ जोनस्केट: मुझे इवेंट रिकॉर्ड क्लास –

+0

का एक्सएमएल() विधि से एक्सएमएल मिल रहा है। यह विधि http://msdn.microsoft.com/en-us/library/system.diagnostics.eventing.reader.eventrecord.toxml क्यों होगी .aspx वापसी खराब xml –

उत्तर

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

यह मेरे लिए काम करता है। http://schemas.microsoft.com/win/2004/08/events/event जोड़ने के साथ समस्या क्या थी और जो त्रुटि से छुटकारा पा लिया। –

+0

हे मार्कस, मैं इवेंटडाटा के तहत जटिल डेटा का मूल्य कैसे प्राप्त कर सकता हूं, कक्षाओं को कैसे परिभाषित किया जाए? यहां एक्सएमएल देखें: http: // stackoverflow।कॉम/प्रश्न/11368636/रीडिंग-विंडोज-इवेंट-पेलोड-समेत-जटिल-डेटा –

3

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 {...} 
+0

मार्कस ने क्या सुझाव दिया था। धन्यवाद मार्क –

+0

@ शेर मेला पर्याप्त है, लेकिन कृपया भविष्य में आंतरिक अपवादों को देखें - यह आमतौर पर समस्या को समझाने का एक बहुत अच्छा काम करता है –