我试图在一个对象的两个不同版本上保存数据,但没有成功。谁能告诉我我做错了什么?
版本一:
[DataContract (Name="Person")]
public class Person_V1
{
[DataMember(Name = "Name")]
public string Name;
[DataMember(Name = "Age")]
public int Age;
[XmlAnyElement]
public XmlElement[] XElements;
}
类(class)的第二版:
[DataContract(Name = "Person")]
public class Person_V2
{
[DataMember(Name = "Name")]
public string Name;
[DataMember(Name = "Age")]
public int Age;
[DataMember(Name = "Weight")]
public int Weight;
[XmlAnyElement]
public XmlElement[] XElements;
}
保存对象的V2:
private void btnSave_V2_Click(object sender, EventArgs e)
{
Person_V2 p = new Person_V2() { Name = "Carrie", Age = 31, Weight = 125 };
var ds = new DataContractSerializer(typeof(Person_V2));
XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
using (XmlWriter w = XmlWriter.Create("person.xml", settings))
ds.WriteObject(w, p);
}
将对象的 V2 还原为 V1 对象。期望看到 XElements 数组中保存的权重变量信息,但它没有发生
private void btnRestore_V1_Click(object sender, EventArgs e)
{
Person_V1 p;
var ds = new DataContractSerializer(typeof(Person_V1));
XmlReaderSettings settings = new XmlReaderSettings();
using (XmlReader r = XmlReader.Create("person.xml", settings))
p = (Person_V1)ds.ReadObject(r);
MessageBox.Show(p.Name + " " + p.Age);
}
最佳答案
Xml*Attribute
类由 XmlSerializer
使用,而不是由 DataContractSerializer
使用。据我所知,DataContractSerializer
没有任何机制来处理这种情况。如果可以,请改用 XmlSerializer
,它会灵活得多。
关于c# - 使用 [XmlAnyElement],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8520228/