的可序列化类

本文关键字:序列化 | 更新日期: 2023-09-27 17:57:50

我想为下面的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>元素。如何在我的案例中扩展此代码?

的可序列化类

这个怎么样:

[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>