我有一個類型列表,我需要保存到文件並在其後讀取它。 我用DataContractSerializer
,但我反序列化期間得到一個異常:序列化/反序列化System.RuntimeType
無法找到與參數(SerializationInfo中, 的StreamingContext)在ISerializable的 「System.RuntimeType」 構造。
我已經添加System.RuntimeType
作爲我的序列化程序的已知類型,但它沒有幫助。
這裏是我的兩個方法的代碼
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);
}
序列化似乎做工精細,輸出文件是好的,但在反序列化問題開始:
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
}
有什麼辦法去通過這個?或者也許有其他方式來存儲類型?
您應該序列化數據**,而不是執行。 「類型」是關於實現的100%。坦率地說,這只是錯誤的路要走,並且幫助你進一步走下那條黑暗的道路將是一種傷害。 IMO。 –
我會序列化數據,但它包含我無法訪問的用戶定義類型。所以當我反序列化他們時,我需要知道這些類型。我認爲訪問它們的唯一方法是將它們存儲在一個文件中。 –