2009-09-28 23 views
0

鉴于以下片段,其中链接是一系列无限制的图像链接和文档链接,应该删除的类是什么?Xml反序列化 - 多种类型的序列

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

通常情况下,如果它只是imagelinks数组我可能有

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

public class ImageLink 
{ 
    public string Value { get; set; } 
} 

但与上面的XML我难倒。

顺便说一句,我没有控制的XML。

回答

2

这个工作

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; } 
} 
1

你应该有一个基类链接如下

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,而不是强类型数组。

+1

不够好。他还需要在'links'上显式声明'[XmlElement]'声明来让'XmlSerializer'知道'Link'的派生类型是什么(以及相应的元素名称是什么)。 –

+0

这是为了回答“它应该是什么类?”的问题,但你有一个有效的答案需要工作。我会离开它,因为Jaimal Chohan已经发布了工作代码。 –

+0

干杯比尔和帕维尔,虽然比尔的答案没有工作,但确实让我朝着正确的方向前进 –