如何在C#中将分层类序列化和反序列化为xml?

如何在C#中将分层类序列化和反序列化为xml?,c#,xml-serialization,hierarchy,xml-deserialization,C#,Xml Serialization,Hierarchy,Xml Deserialization,实际上我可以序列化,但是我不能反序列化它。我需要有一个viewmodel的对象,其中包含来自失稳输出的所有子对象,而且我不确定应该在哪里设置xml属性;模型或视图模型 这是我的clss和viewmodel public class Person { public string Name { get; set; } readonly List<Person> children = new List<Person>(); publi

实际上我可以序列化,但是我不能反序列化它。我需要有一个viewmodel的对象,其中包含来自失稳输出的所有子对象,而且我不确定应该在哪里设置xml属性;模型或视图模型

这是我的clss和viewmodel

public class Person
{
     public string Name { get; set; }       
     readonly List<Person> children = new List<Person>();
     public IList<Person> Children
     {
         get { return children; }
     }    
}

public class PersonViewModel : {

private ObservableCollection<PersonViewModel> children; 
private Person person;

public PersonViewModel()
{
    person = new Person();
}

public PersonViewModel(Person _person)
{
    person = _person;
    children = new ObservableCollection<PersonViewModel>(
            (from child in _person.Children
                select new PersonViewModel(child))
                .ToList<PersonViewModel>());
}

[XmlElement("Name", typeof(string))]
public string Name
{
    get
    {
        return person.Name;
    }

    set
    {
        person.Name = value;
        this.RaisePropertyChanged("Name");
    }
}

[XmlArray("Children", IsNullable = false), XmlArrayItem("Person"),]
public ObservableCollection<PersonViewModel> Children
{
    get
    {
        return children;
    }
}
反序列化程序:

            XmlSerializer xs = new XmlSerializer(typeof(PersonViewModel), new XmlRootAttribute { ElementName = "OrgChart" });
        using (StreamWriter wr = new StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + "OrgChart.XML"))
        {
            xs.Serialize(wr, rootPerson);
        }
                    XmlSerializer xs = new XmlSerializer(typeof(PersonViewModel), new XmlRootAttribute { ElementName = "OrgChart" });

                FileStream fs = new FileStream(filePath, FileMode.Open);
                XmlReader reader = XmlReader.Create(fs);

                rootPerson = SelectedItem = Profile = (PersonViewModel)xs.Deserialize(reader);
                reader.Close();

请你把“破坏稳定的输出”改一下好吗?XmlSerializer可以序列化/反序列化类的公共读/写表面。由于子级没有setter,因此无法对其进行反序列化。我想补充的是,只能序列化或反序列化类属性。Person类(您将序列化Person,不是吗?)包含IList,但必须包含带有getter和setter的列表。我认为readonly children字段不必是只读字段,因为反序列化程序将创建Person对象并为children属性指定新值。您能展示一下您的序列化/反序列化代码吗?谢谢,我刚刚更新了我的帖子,并添加了我的XmlDiscreator的结果。是的,我想序列化person类。但当我想反序列化所需的xml文件和视图模型的对象时。@Ralf,Oleksa;非常感谢你的帮助,我知道了。