2013-02-26 53 views
3
<Fruits> 

      <FruitName>Amla</FruitName> 
      <FruitPrice>10 US DOLLARS</FruitPrice> 

      <Origin> 
       <Country>INDIA</Country> 
       <NativeName>GOOSEBERRY</NativeName> 
       <Availability>PLENTY</Availability> 
      </Origin> 

      <OtherInfo> 
       <FiberPercentage>1.11</FiberPercentage> 
       <MagnesiumPercentage>0.02</MagnesiumPercentage> 
      </OtherInfo> 

序列化的XML元素的陣列的已經內的xmlAny元

雖然德序列化上面的XML結構,我使用類似,

的Xml

XmlElement("FruitsList")] 
public List<Fruits> FruitsImport { get; set; } 

在水果類,我有類似的東西:

[XmlAnyElement] 
    public List<XmlElement> FruitElements { get; set; } 

    [XmlElement("Origin")] 
    public List<XmlElement> FruitOrigin { get; set; } 

    [XmlElement("OtherInfo")] 
    public List<XmlElement> OtherInfo { get; set; } 

FruitElement檢索FruitNameFruitPriceFruitOrigin單獨搜索國家InfoOtherInfo單獨檢索FiberPercentage

關於如何獲取<Origin><OtherInfo>標籤下的所有信息的任何想法?

回答

4

因爲您有嵌套在<origin><otherinfo>標記中的元素,所以在執行反序列化時,還需要爲它們定義類。

[XmlElement("Origin")] 
public List<Origins> FruitOrigin { get; set; } 

您將以與水果類相同的方式定義原點類。

(產地類的骨架將東西如下:

[Serializable] 
public class Origin 
{ 
    [XmlAnyElement] 
    public List<XmlElement> OriginElements { get; set; } 
} 

+0

謝謝Dude ..正是我在找什麼! – 2013-02-26 13:21:16

+0

@現在不能命名的人我的榮幸,很高興我能幫助你 – l46kok 2013-02-26 13:22:44

1

最好的辦法是寫XSD架構的XML和使用XSD.exe生成XSD架構類,這種方式您可以驗證始終XML和類與XSD匹配,並且永遠不會遇到序列化/反序列化問題。

你可以像下面從XSD架構生成類中創建批處理文件:

del Configuration.AutoGenerated.cs 
"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\xsd" Test.Configuration.xsd /c /n:Test.Configuration 

rename Test_Configuration.cs Configuration.AutoGenerated.cs 
pause 

你可以看到在上面的鏈接,更XSD.EXE用法示例。 它將生成部分類,以便您可以在需要時進一步擴展它。