私はオブジェクトの2つの異なるバージョンでデータを保存しようとしていて、それに成功しません。誰かが私が間違っていることを教えてもらえますか?[XmlAnyElement]を使用する
版クラスの一つ:
[DataContract (Name="Person")]
public class Person_V1
{
[DataMember(Name = "Name")]
public string Name;
[DataMember(Name = "Age")]
public int Age;
[XmlAnyElement]
public XmlElement[] XElements;
}
版クラスの2つの物体の
[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:V1オブジェクトにオブジェクトの
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。 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);
}
私はそれを全く見ないと思っています。 –
なぜですか?私は、[XmlAnyElement]は、オブジェクトの一部ではないXMLファイル内のデータのキャッチオールであると考えました。私はここから完全に離れていますか? –
それは配列なので、XElememtsタグに含まれます。それ以外の選択肢は、XElments内に年齢、名前、体重があった場合、個々のプロパティを上書きすることを意味します。 tahtを避けることは、KISSの原則を真剣に破ります。 –