2014-04-11 155 views
0

我想爲下面的XML創建一個可序列化的C#類。可序列化類

<xml> 
    <versions> 
    <org.geotools.util.Version> 
     <version>1.0.0</version> 
    </org.geotools.util.Version> 
    <org.geotools.util.Version> 
     <version>1.1.0</version> 
    </org.geotools.util.Version> 
    <org.geotools.util.Version> 
     <version>2.0.0</version> 
    </org.geotools.util.Version> 
    </versions> 
    <gml> 
    <entry> 
     <version>V_20</version> 
     <gml> 
     <srsNameStyle>URN2</srsNameStyle> 
     <overrideGMLAttributes>false</overrideGMLAttributes> 
     </gml> 
    </entry> 
    <entry> 
     <version>V_10</version> 
     <gml> 
     <srsNameStyle>XML</srsNameStyle> 
     <overrideGMLAttributes>true</overrideGMLAttributes> 
     </gml> 
    </entry> 
    <entry> 
     <version>V_11</version> 
     <gml> 
     <srsNameStyle>URN</srsNameStyle> 
     <overrideGMLAttributes>false</overrideGMLAttributes> 
     </gml> 
    </entry> 
    </gml> 
</xml> 

我知道我可以做這樣的事情:

[XmlRoot(ElementName = "xml")] 
interface IServiceSettings : IXmlSerializable 
{ 
    [XmlArray(ElementName = "versions")] 
    [XmlArrayItem(ElementName = "org.geotools.util.Version")] 
    IList<string> Versions { get; set; } 
} 

但它是將只包含字符串<org.geotools.util.Version>元素唯一的工作。如何擴展這個代碼對我的情況?

回答

2

這個什麼:

[XmlRoot(ElementName = "xml")] 
interface IServiceSettings<T> : IXmlSerializable 
{ 
    [XmlArray(ElementName = "versions")] 
    [XmlArrayItem(ElementName = "org.geotools.util.Version")] 
    IList<T> Versions { get; set; } 
} 

然後接口的實現將是通用以及

public class ServiceSettings<T> : IServiceSettings<T> 
+0

好主意,但如果我在我的'IServiceSettings'接口有更多這樣的列表和他們的類型會不同? – Nickon

+0

他們有一個共同的亞型或根本沒有關係? –

+0

他們是'串',總是 – Nickon