将xml属性反序列化为List <string>

时间:2016-12-28 18:26:07

标签: c# xml serialization

我正在尝试将包含页面列表的属性反序列化为<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

1 个答案:

答案 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中。