代码之家  ›  专栏  ›  技术社区  ›  Jaimal Chohan

XML反序列化-多个类型的序列

  •  0
  • Jaimal Chohan  · 技术社区  · 15 年前

    下面的片段中,链接是一系列无边界的imagelinks和documentlinks,那么取消链接的类应该是什么?

    <Values>
       <Links>
          <ImageLink>http://#</ImageLink>
          <ImageLink>http://#</ImageLink>
          <DocumentLink>http://#</DocumentLink>
       </Links>
    </Values>
    

    通常,如果它只是一个图像链接数组,我可能会

    public class Values
    {
       public imagelink[] ImageLinks { get; set; }
    }
    
    public class ImageLink
    {
       public string Value { get; set; }
    }
    

    但是使用上面的XML,我感到很困惑。

    顺便说一句,我无法控制XML。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jaimal Chohan    15 年前

    这工作

    public class DocumentLink : Link
    {
    }
    
    public class ImageLink : Link
    {
    }
    
    public class Link
    {
        [XmlText]
        public string Href { get; set; }
    }
    
    public class Values
    {
        [XmlArrayItem(ElementName = "ImageLink", Type = typeof(ImageLink))]
        [XmlArrayItem(ElementName = "DocumentLink", Type = typeof(DocumentLink))]
        public Link[] Links { get; set; }
    }
    
        2
  •  1
  •   Bill Yang    15 年前

    您应该有一个如下的基类链接

    public class Link
    {
      public string Href { get; set; }
    }
    
    public class ImageLink : Link
    {
    }
    
    public class DocumentLink : Link
    {
    }
    

    你的价值观类应该是:

    public class Values
    {
       public Link[] links { get; set; }
    }
    

    或者,可以使用arraylist而不是强类型数组。