Ich habe einen getippten (nicht verbundenen) Datensatz und viele Datensätze (binär seriell) mit diesem Datensatz erstellt. Ich habe eine Eigenschaft zu einem der Typen hinzugefügt, und ich möchte die alten Datensätze mit dem neuen Datensatz konvertieren. Ich weiß, wie man sie lädt: Bereitstellung benutzerdefinierter Bindemittel für den BinaryFormatter mit der alten Schema-DLL. Die Frage ist, wie kann ich Objekte des alten Typs in Objekte des neuen Typs konvertieren - beide Typen haben den gleichen Namen, aber der neue hat eine weitere Eigenschaft.Wie wird das typisierte DataSet-Schema konvertiert, wenn einer der Typen geändert wurde?
1
A
Antwort
0
Können Sie die neue Klasse von der alten erben lassen? Wenn ja, kannst du dich durch Casting einfach in das neue deserialisieren. Wenn nicht, ist eine andere mögliche Lösung, eine Stapeloperation zu implementieren, wo Sie einen Verweis auf die alte Klasse und die neue Klasse in verschiedenen Namespaces einschließen, das alte Objekt hydratisieren, eine tiefe Kopie in ein Objekt der neuen Klasse ausführen und Serialisieren Sie das neue Objekt.
2
Wenn der einzige Unterschied zwischen dem vorhandenen und dem neuen Datensatz ein hinzugefügtes Feld ist, können Sie sie "upgraden", indem Sie die alten in XML schreiben und dann in die neuen einlesen. Der Wert des hinzugefügten Feldes ist DBNull.
MyDataSet myDS = new MyDataSet();
MyDataSet.MyTableRow row1 = myDS.MyTable.NewMyTableRow();
row1.Name = "Brownie";
myDS.MyTable.Rows.Add(row1);
MyNewDataSet myNewDS = new MyNewDataSet();
using(MemoryStream ms = new MemoryStream()){
myDS.WriteXml(ms);
ms.Position = 0;
myNewDS.ReadXml(ms);
}