如果不能将基类标记为可序列化,如何序列化 ac# 类。
我在 c# wpf 应用程序中使用 Caliburn Micro,MyViewModel 派生自 Screen ( https://caliburnmicro.com/documentation/composition )。我需要在文件中序列化 MyViewModel 的 (Xml serializer / BinarySerializer / DataContractSerializer) 对象,以便我以后可以使用它。
我可以将 MyViewModel 标记为 [Serializable] 但得到异常,即基类(来自 caliburn micro 的 Screen)未标记为 [Serializable],因此无法序列化对象。我无法在 Screen 中将属性添加为 [Serializable],因为它是第三方库。
谁能建议我如何序列化 MyViewModel 对象?
[Serializable]
public class MyViewModel : Screen
{
// Rest of functionalities
}
我收到异常:在程序集“Caliburn.Micro, Version=3.2.0.0, Culture=neutral, PublicKeyToken=1f2ed21f”中键入“Caliburn.Micro.Screen”未标记为可序列化。
下面的链接有助于解决我的问题
DataContractSerializer:如何在没有 DataContract/DataMember 属性的情况下序列化类/成员
伪代码: 序列化:
using (var stream = File.Open(filePath, FileMode.Create))
{
var writer = new DataContractSerializer(myViewModelObject.GetType());
writer.WriteObject(stream, myViewModelObject);
stream.Close();
}
反序列化:
using (var fs = new FileStream(filePath, FileMode.Open))
{
var reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
var deserializer = new DataContractSerializer(MyViewModel);
var deserializedType = deserializer.ReadObject(reader, true);
reader.Close();
fs.Close();
return deserializedType;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句