Ich versuche, eine Speicherroutine für meine Anwendung zu schreiben, wo mehrere Teile der Anwendung Elemente zu einem Dictionary hinzufügen und dann die Speicherfunktion in a schreibt XML-Datei. Die offene Routine muss diese Dateien lesen und das Dictionary neu füllen und diese Objekte dann wieder in meine Anwendung einfügen. Ich kämpfe mit der Deserialisierung der Routine, die ich jetzt habe. Mein speichern Routine alsWie man ein Dictionary <string, object> in XML serialisiert/deinserialisiert
XmlDocument xmlDoc = new XmlDocument();
// Write down the XML declaration
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
// Create the root element
XmlElement rootNode = xmlDoc.CreateElement("TireStudy");
xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);
xmlDoc.AppendChild(rootNode);
foreach (var saveItem in _SaveItems)
{
XPathNavigator nav = rootNode.CreateNavigator();
using (var writer = nav.AppendChild())
{
var serializer = new XmlSerializer(saveItem.Value.GetType());
writer.WriteWhitespace("");
serializer.Serialize(writer, saveItem.Value);
writer.Close();
}
}
xmlDoc.Save(fileName);
Diese Routine funktioniert folgt, ist eine Datei zu erstellen, aber ich würde der Schlüsselwert des Wörterbuchs wie auch in der Datei gespeichert werden, und ich bin nicht sicher, wie das deserialisieren Datei erstellt, weil ich die Arten der Objekte nicht kenne, bevor ich sie lese.
Teil 2 (ich hasse das Hinzufügen neuer Teile auf eine Frage, aber ich weiß nicht, einen besseren Weg sehen, die Probleme für die Zukunft zu adressieren)
ich jetzt den folgenden Code haben,
var knownTypes = new List<Type>
{
typeof(ObservableCollection<string>),
typeof(ObservableCollection<Segments>),
typeof(Segments),
typeof(List<string>)
};
var serialized = _SaveItems.Serialize(knownTypes);
aber ich erhalte die folgende Ausnahme
Type 'System.Collections.Generic.List`1[System.String]' cannot be added to list of known types since another type 'System.Collections.ObjectModel.ObservableCollection`1[System.String]' with the same data contract name 'http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfstring' is already present. If there are different collections of a particular type - for example, List<Test> and Test[], they cannot both be added as known types. Consider specifying only one of these types for addition to the known types list.
Wenn ich entweder die typeof (ObservableCollection) oder die typeof (List) es Ausnahmen löschen beschweren sie die man braucht, ich gelöscht.
In Bezug auf Teil 2, bin ich nicht sicher Wenn dies ein Framework [Einschränkung] (http://msdn.microsoft.com/en-us/library/aa347850.aspx) oder [Bug] (http://support.microsoft.com/kb/967339). – xmamat
So oder so, ich habe gerade meine Liste losgeworden und ObservableCollection in meiner Klasse verwendet und das Leben wurde einfacher. Danke für Ihre Hilfe. –
PlTaylor