2010-06-11 74 views
1

有沒有一種方法可以在XML中指定基於數據包的協議,因此(德)序列化可以自動發生?XML中的協議規範

上下文如下。我有一個通過串口進行通信的設備。它發送和接收由'數據包'組成的字節流。數據包是基本數據類型和(有時)其他數據包的集合。數據包的一些元素是有條件的;它們的包含取決於早期的元素。

我有一個與此設備通信的C#應用​​程序。當然,我不想在整個應用程序中使用字節級的工作。我想將協議與我的應用程序代碼分開。因此我需要將字節流轉換爲結構(類)。

目前我已經在C#中實現了協議,爲每個數據包定義了一個類。這些類爲每個數據包定義了元素的順序和類型。使團體成員有條件是困難的,因此協議信息以功能結束。

我想象的XML看起來像這樣(請注意,我的經驗設計XML限於):

<packet> 
    <field name="Author" type="int32" /> 
    <field name="Nickname" type="bytes" size="4"> 
    <condition type="range"> 
     <field>Author</field> 
     <min>3</min> 
     <max>6</min> 
    </condition> 
    </field> 
</packet> 

.NET有一種叫做「二進制序列」,但我不認爲這就是我尋找。

即使數據包'包含'其他數據包並且有條件元素,是否有辦法將協議和代碼分開?

+0

聽起來有點像WSDL。 – 2010-06-11 17:24:26

+0

您是否定義了來自設備的數據包結構?或者是預先註冊的? – Rusty 2010-06-11 17:39:24

+0

數據包結構是預先註冊的。我還應該說,我的興趣主要是學術性的,而不是實際的或商業性的。 – Matt 2010-06-11 18:30:40

回答

0

也許部分答案會幫助您瞭解我想要獲得的信息。

如果沒有「協議庫」可用,但我可以自己實現這一點。我可能不得不使用(類似於)這四個步驟:

  1. 設計XML以存儲可以構造數據包的規則。
  2. 使用'Abstract Factory Pattern',它創建具有共同主題的對象。
  3. 將字節數組解析爲在運行時創建的中間類。
  4. 使用反射將這些中間類映射到在設計時定義的類。

這是不是一個明確的答案。顯然,我不想重新發明輪子;如果有解決方案可用,我會接受。