我有一个类型列表,我需要保存到文件并在其后读取它。 我用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。 –
我会序列化数据,但它包含我无法访问的用户定义类型。所以当我反序列化他们时,我需要知道这些类型。我认为访问它们的唯一方法是将它们存储在一个文件中。 –