我正在尝试序列化的一组类作为此规范的一部分:http://open511.org/root.html
public class Link
{
public Link()
{
}
public Link(string url, string rel = "self")
{
Url = url;
Rel = rel;
}
[XmlAttribute("rel")]
public string Rel { get; set; }
[XmlAttribute("href")]
public string Url { get; set; }
}
和
public class Service
{
private Link _serviceTypeUrl;
[XmlElement("link")]
public Link ServiceTypeUrl
{
get { return _serviceTypeUrl; }
set
{
_serviceTypeUrl = value;
_serviceTypeUrl.Rel = "service_type";
}
}
[XmlElement("link")]
public Link Url { get; set; }
[XmlArray("supported_versions")]
[XmlArrayItem("supported_version")]
public List<SupportedVersion> SupportedVersions { get; set; }
}
它不会让我有两个具有相同XMLElement的属性。有没有办法做到这一点?
我本来希望让链接类指定始终使用元素名称“link”
答案 0 :(得分:0)
看起来你想要实现的目标不受支持。您的替代方案是:
Link
个。这使得查询数据变得困难
在某些情况下,但我相信会给你类似你想要的东西。<强>来源强>
答案 1 :(得分:0)
受FreeAsInBeer的回答启发,我将它们存储在一个列表中,并编写了一个自定义插入内容以防止重复插入。
public class Service
{
private List<Link> _links;
[XmlIgnore]
public Link ServiceTypeUrl
{
get { return Links.FirstOrDefault(l => l.Rel == "service_type"); }
set
{
var tempLink = value;
tempLink.Rel = "service_type";
Links.RemoveAll(l => l.Rel == tempLink.Rel); // prevent duplicate rel
Links.Add(tempLink);
}
}
[XmlIgnore]
public Link Url
{
get { return Links.FirstOrDefault(l => l.Rel == "self"); }
set
{
var tempLink = value;
tempLink.Rel = "self";
Links.RemoveAll(l => l.Rel == tempLink.Rel); // prevent duplicate rel
Links.Add(tempLink);
}
}
[XmlElement("link")]
public List<Link> Links
{
get { return _links ?? (_links = new List<Link>()); }
set { _links = value; }
}
[XmlArray("supported_versions")]
[XmlArrayItem("supported_version")]
public List<SupportedVersion> SupportedVersions { get; set; }
}