让一个类提供默认的XmlElementName
本文关键字:默认 XmlElementName 一个 | 更新日期: 2023-09-27 18:18:28
我有一组类,我试图序列化作为本规范的一部分: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类指定它总是使用元素名"link"
看起来您想要实现的目标不被支持。你的选择是:
- 使用不同的元素名序列化属性
- 使用集合来保存所有的
Link
。这使得查询数据变得困难在某些情况下,但我相信会给你类似你想要的东西。
- 所以回答1
- 所以答案2
受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; }
}