C#对象序列化

阿文·潘迪

如果不能将基类标记为可序列化,如何序列化 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章