2011-02-28 59 views
0

使用c#,我想將來自各種源的xml反序列化爲通用類型的對象。 XML不會有相同的模式。例如,在以下xml中,/thingContainer/thing/namewidget/@title都將映射到myClass.DisplayName將具有不同架構的XML反序列化爲共享類型

XML1:

<thingContainer> 
    <thing> 
     <name>MyName</name> 
    </thing> 
</thingContainer> 

XML2:

<widget title="myTitle" /> 

所以,我無法將類[XmlElement]標記,因爲它會根據我的XML的來源是不同的。有一些技巧,我可以做的繼承或一些幫助類,這將使我可以輕鬆地從不同的來源反序列化XML?有沒有簡單的方法將類字段映射到xpaths?

當然,如果我必須,我會解析並手動反序列化xml ......但是有什麼好玩的呢?

回答

1

兩個想法,馬上映入腦海:

  • 使用XSLT原始XML轉換成符合你的對象模型的臨時格式(一種非常流行的做法,雖然我個人鄙視XSL)
  • 創建臨時對象模型進行反序列化,然後將它們映射到最終的對象模型。

可能有一些XmlElement hackery可能,但它似乎是一個混亂的方法。

0

我想你這裏有兩種選擇:

  1. 實現IXmlSerializable爲您的類和反序列化要考慮到你的XML的結構
  2. 只需使用LINQ到XML解析XML和創建的實例你的班。這是我會選擇的方法(自己經歷了第一選擇而不喜歡它)
相關問題