如何在C#中将分层类序列化和反序列化为xml?
实际上我可以序列化,但是我不能反序列化它。我需要有一个viewmodel的对象,其中包含来自失稳输出的所有子对象,而且我不确定应该在哪里设置xml属性;模型或视图模型 这是我的clss和viewmodel如何在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
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;非常感谢你的帮助,我知道了。