Ich habe eine Liste von Typen, die ich brauche zu speichern, nachdem die Datei und zu lesen. Ich benutze DataContractSerializer
aber ich erhalte eine Ausnahme während der Deserialisierung:Serialize/deserialisieren System.RuntimeType
nicht gefunden Konstruktor mit Argumenten (SerializationInfo, Streaming) in ISerializable "System.RuntimeType".
Ich habe System.RuntimeType
als einen bekannten Typ zu meinem Serializer hinzugefügt, aber es hat nicht geholfen.
Hier Code meiner beiden Methoden
public static void SaveTypes(List<Type> types, string fileName)
{
Type rt = types[0].GetType();
List<Type> knownTypes = new List<Type>() { rt }; //I get a List with System.RuntimeType item here
DataContractSerializer serializer = new DataContractSerializer(typeof(List<Type>), knownTypes);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
Stream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
using (XmlWriter xw = XmlWriter.Create(fs, settings))
serializer.WriteObject(xw, types);
}
Serialisierung scheint gut zu funktionieren, und die Ausgabedatei ist in Ordnung, aber Problem beginnt am Deserialisieren:
public static object LoadTypes(string fileName)
{
Stream file = new FileStream(fileName, FileMode.Open, FileAccess.Read);
byte[] data = new byte[file.Length];
file.Read(data, 0, (int)file.Length);
Type rt = file.GetType();
List<Type> knownTypes = new List<Type>() { rt.GetType() };
DataContractSerializer deserializer = new DataContractSerializer(typeof(List<Type>), knownTypes);
Stream stream = new MemoryStream();
stream.Write(data, 0, data.Length);
stream.Position = 0;
return deserializer.ReadObject(stream); //exception here
}
Gibt es einen Weg zu durchlaufen Dies? Oder gibt es eine andere Möglichkeit, Typen zu speichern?
Sie sollten die ** Daten ** serialisieren, nicht die Implementierung. Ein 'Type' steht zu 100% für die Implementierung. Ehrlich gesagt, ist es einfach der falsche Weg, und es wäre ein schlechter Dienst, Ihnen zu helfen, diesen dunklen Weg weiter zu gehen. IMO. –
Ich serialisiert die Daten, aber es enthält benutzerdefinierte Typen, auf die ich keinen Zugriff habe. Also, wenn ich sie deserialize, muss ich diese Typen kennen. Ich dachte, der einzige Weg, um Zugang zu ihnen zu bekommen, ist sie in einer Datei zu speichern. –