如何通过Collectionbase序列化内部对象的附加属性

本文关键字:属性 内部对象 何通过 Collectionbase 序列化 | 更新日期: 2023-09-27 18:21:55

我有两个类,如下所示,我想将对象student序列化为.xml文件。我可以创建xml文件,但不能使用"ClassName"属性。

[Serializable]
public class Person
{
    [XmlAttribute]
    public string FirstName { get; set; }
    [XmlAttribute]
    public string LastName { get; set; }
}
public class Student : System.Collections.CollectionBase, IEnumerable<Person>
{
    [XmlAttribute]
    public string ClassName { get; set; }
    public void Add(Person person) 
    {
        List.Add(person);
    }
    public Person this[int index]
    {
        get
        {
            return (Person)List[index];
        }
    }
    #region IEnumerable<Person> 成员
    public new IEnumerator<Person> GetEnumerator() 
    {
        foreach (Person transducer in List)
        yield return transducer;
    }
    #endregion
}

我得到了这样的xml内容,并且没有ClassName字段

Student student = new Student();
student.Add(new Person(){ FirstName = "bill", LastName = "gates" });
student.Add(new Person(){ FirstName = "bill", LastName = "gates" });
student.ClassName = "AAA";
XmlSerializer x2 = new XmlSerializer(typeof(Student));
x2.Serialize(File.Create("ab.xml"), student);

我怎样才能拿到房产???

如何通过Collectionbase序列化内部对象的附加属性

问题在于对实现IList的所有内容的默认序列化。它只是列举内容,而不是属性。

解决方案是不在序列化类中实现CollectionBase,而是创建一个这样做的属性:

public class Student
{
    List<Person> Items { get; set; }
}