ここでの前の質問で、シリアル化しようとしているxmlを投稿しました。別の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>
<ComplexData Name="XYZXYZ">0C004300310022002D004400460053005400450053002200310003004E0053003200230041002D00570041002D00320045004400000047006C002900620061006C0048006900670068005000720069006F007200240074006600120044006100730087000000000000000000000000000000</ComplexData>
</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>
1つの違いは、整数値(後続の文字列の長さ...など)と文字列ユニコードの配列を定義する構造体である複雑なデータがあることです。私はその文字列をバイトごとにデコードする方法を考え出しましたが、それを行うためのよりクリーンな方法が必要です。EventRecord.ToXml()が、複雑なデータ/構造体/配列を含むイベントペイロードを取得するための最良の方法ではない場合、それを取得するための最良の方法は何ですか。msdnにはWindowsイベント関連のクラスがたくさんあり、どれを使用すればよいかわかりません。
ありがとう
編集: これは私がComplexDataについて知っていることのいくつかのサンプルです:
<data
inType="win:UInt16"
name="XYZLength"
/>
<data
inType="win:UnicodeString"
length="XYZLength"
name="XYZ"
/>
つまり、最初の2バイト(ローエンディアン形式)は、次のUnicode文字列の長さなどです。そして、長さがないものについては、16ビットのゼロ(2バイトのゼロ)であるヌル終端を見つける必要があります。