是否可以使用.net提供的序列化属性将xml反序列化为List对象?

时间:2010-01-29 18:14:56

标签: c# serialization list

我有xml输入,看起来像(例如使用简化版):

<Student>
<Subject> History </Subject>
<Subject> English </Subject>
</Student>

有没有办法让上面的xml反序列化为类如下的对象:

[Serializable]
[XmlRoot(ElementName = "Student", Namespace="")]
class Student
{
  public Student()
  {
    Subject = new List<string>();
  }

  public List<string> Subject {get;set;}

}

注意我试图找出是否可以在不必实现IXmlSerializable接口的情况下完成此操作,并且我想使用列表来存储 Subject 值(不是我知道的字符串[]我可以使用XmlElement属性。

1 个答案:

答案 0 :(得分:4)

使用XmlArrayAttribute装饰Subject属性。

[XmlArray]
public List<string> Subject { get; set; }

如果您需要省略Subject元素并将Subject条目直接放在Student下面,您只需使用[XmlElement]属性:

[XmlElement]
public List<string> Subject { get; set; }

使用Student类对其进行序列化会产生与此类似的输出:

<?xml version=\"1.0\" encoding=\"utf-16\"?>
<Student xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
    xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
    <Subject>History</Subject>
    <Subject>English</Subject>
</Student>"