2013-02-27 80 views
0

我想構建C#二進制解碼器。我有描述二進制文件數據結構的XML文件。使用xml指定數據結構的二進制解碼器

下一步是根據該XML動態製作數據結構(在代碼中)。 你們是否對我有任何意見,鏈接,代碼等?

我知道這是一般性的問題,但我只想開始一些地方,我不知道從哪裏知道。

編輯:

對不起需要刪除代碼...

BR

+0

你有兩個問題。一個有點太寬泛(如何解碼二進制信息),另一個是如何讀取XML文件。您應該將問題分爲兩部分,併爲每個具體問題提供更多信息。 – jgauffin 2013-02-27 12:02:29

+0

是的,我知道這一點。問題在於這個問題是連接的。我需要編寫基於XML構建C#結構或類的代碼。讀取XML不是問題,有許多簡單的方法可以做到這一點,但訣竅是如何從該XML(在代碼中)生成結構或類。 – JohnDoeKazama 2013-02-27 12:09:12

+0

不,他們沒有真正相關。您可以閱讀XML並創建C#類,其中包含有關如何構建對象的說明。 XML部分只是指令的序列化,而不是真正的生成問題的一部分。您仍然需要提供XML包含的內容?類名/屬性名稱?或者,您應該使用哪些數據來試圖找出數據類型? – jgauffin 2013-02-27 12:22:32

回答

0

要讀取和寫入XML文檔的內容,您可以使用C#提供XmlDocument類。

這裏有一些鏈接,它可以幫助你:

+0

鏈接只有答案不允許在這裏。您應該提取一個代碼片段,其中顯示瞭如何執行任務。 – jgauffin 2013-02-27 12:01:10

+0

嗨,thx回答,但閱讀XML並不是問題。問題是如何從代碼中的xml生成結構或類。 – JohnDoeKazama 2013-02-27 12:09:59

1

由於要動態創建的數據結構(而不​​是靜態建立基於XML定義類),我想你需要一個通用的數據結構,然後你可以查詢。這看起來像什麼,取決於你描述的是什麼樣的數據結構。它是記錄和字段嗎?層次結構中是否存在多種記錄類型?如果沒有層次結構,則可以爲每個字段使用鍵值對的字典。如果有層次結構,我會認爲可導航的樹會覆蓋大多數場景。你可以爲此使用XML DOM,但我認爲這不是最乾淨的解決方案,我更喜歡使用通用樹結構。沒有內置的(請參閱Tree data structure in C#),但使用泛型創建一個相當容易。

編輯

上述假設要動態創建一個結構是使用動態。 如果你想以動態方式創建一個代碼結構,將使用靜態地使用(例如,你想能夠寫出類似myDataStrucureThatWasDefinedInXml.MyProperty1的東西),請看看CodeDom。

並且想到了更多關於它的內容,它取決於您想要做什麼,一旦你已經反序列化你的二進制數據。您可能還想查看Expando對象和表達式樹。

+0

嗨,這是非常有趣的答案。關鍵的問題是我有這個xml文件,它描述瞭如何解碼和解析數據(例如:包含9個參數的先到先頭,其中這兩個參數是可選的,等等),並且這個XML **將來會改變** 。編輯:還有xsd文件,這是我的xml文件desc(但xml和二進制文件被輸入到應用程序)。 – JohnDoeKazama 2013-02-27 12:52:23

+1

如果XML將發生變化,我認爲你對數據的處理是相當通用的,不依賴於那裏的某些數據?否則,每次XML更改時,需要更改處理反序列化數據的代碼。如果是這樣,這聽起來像你需要通用的數據結構方法。 – Giles 2013-02-27 13:01:51

+1

我從您添加的示例代碼中看到,您正試圖直接讀取結構(我沒有意識到這是在內存中)。由於您沒有精確的結構,因爲它是用XML定義的,所以您不得不將二進制數據讀取爲結構,而只是將其讀取爲字節數組。然後,根據您的XML定義,您必須解釋該數組(並將其放入通用結構或動態對象等中)。 – Giles 2013-02-27 13:22:23