我正在尝试将包含页面列表的属性反序列化为<Node Pages="1,2">
对象。如果我使用空格分隔符,我可以很好地反序列化它,但我想用逗号或垂直条看起来更干净。
是否可以反序列化
List<String>
加入List<int>
或public List<int> Pages;
?
我的班级也很简单。
br
| Name:
br
input#username type=text name=username
br
| Password:
br
input#password type=password name=password
br
input type=submit
a href=/login Cancel
答案 0 :(得分:2)
XmlSerializer
不支持开箱即用的属性。如果您控制XML的结构,请考虑使用子元素,因为使用字符分隔的属性字符串有点胜过XML的目的。
您可以使用计算属性解决它。但请记住,这会慢一些,因为每次访问此属性时,都将解析以逗号分隔的字符串。
[XmlAttribute(AttributeName = "Pages")]
public string PagesString { get; set; }
public IList<int> Pages {
get {
return PagesString.Split(',').Select(x => Convert.ToInt32(x.Trim())).ToList();
}
set {
PagesString = String.Join(",", value);
}
}
此外,这种愚蠢的实现并没有考虑到字符串中可能存在错误的输入。你也应该防范这一点。
另一件需要注意的事情是,每次访问Pages属性时,都会返回一个新集合。如果对返回的值调用Add()
,则此更改不会反映在XML中。