【发布时间】:2015-11-21 22:45:21
【问题描述】:
在 WPF 中,我需要对具有大量点的折线变量进行二进制序列化。我使用以下代码:
SaveFileDialog sf = new SaveFileDialog();
sf.FileName = "Orig.txt");
if (sf.ShowDialog() == true)
{
FileStream fs = new FileStream(sf.FileName, FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(fs, plOriginal);
}
catch (Exception exc)
{
MessageBox.Show("Failed to serialize. Reason: " + exc.Message);
}
fs.Close();
}
但我得到了错误:
System.Runtime.Serialization.SerializationException:类型 程序集“PresentationCore”中的“System.Windows.Media.PolyLineSegment”, 版本=3.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 是 未标记为可序列化。在 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType 类型)在 System.Runtime.Serialization.FormatterServices.GetSerializableMembers(类型 类型,StreamingContext 上下文)在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(对象 obj,ISurrogateSelector surrogateSelector,StreamingContext 上下文, SerObjectInfoInit serObjectInfoInit,IFormatterConverter 转换器, ObjectWriter objectWriter) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(对象 图,Header[] inHeaders,__BinaryWriter serWriter,布尔 fCheck)
在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 序列化流、对象图、Header[] 标头、布尔 fCheck)
在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(流 序列化流,对象图)在 CurveAnalyzerDemoWPF.MainWindow.rbSave_Click(对象发送者, RoutedEventArgs e) 在 MainWindow.xaml.cs:line 92}
那么有什么解决方法可以让它工作吗? 提前谢谢
编辑:我将可序列化属性放在折线变量上:
[Serializable]
private PolyLineSegment plOriginal = new PolyLineSegment();
但我得到以下编译错误: 错误 1 属性“Serializable”在此声明类型上无效。它仅对“类、结构、枚举、委托”声明有效。 F:\C# WPF\CurveAnalyzerDemoWPF\CurveAnalyzerDemoWPF\MainWindow.xaml.cs 55 4 CurveAnalyzerDemoWPF
【问题讨论】:
标签: wpf serialization binary