我尝试着去尝试一下这个不可思议的东西。 我做了两个具有“可序列化”属性的类。 只有一个类从ISerializable派生,并为其定义了GetobjectData。 让我们调用这个类A.另一个不是从ISerializable那里派生出来的,GetobjectData没有为它定义。 让我们称这个类为B.我没有提供任何特殊的类A的构造函数。现在在运行时类A显示错误,如“特殊构造函数丢失”。 这两个类的语法都是一样的。 所以,错误可能是一些其他的事情,但它不应该是关于构造函数。 否则,我也应该得到类B的同样的错误。 请参阅下面的代码。 有人可以说背后的原因吗?
注:我正在使用Visual Studio 2010的Windows 7 – 64位。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace Delete_This { [Serializable] class After_Implementing_ISerializable:ISerializable { int a; string b; public After_Implementing_ISerializable(int a,string b) { this.a = a; this.b = b; } public void GetobjectData(SerializationInfo info,StreamingContext context) { } public void Check() { After_Implementing_ISerializable s = new After_Implementing_ISerializable(15,"100"); FileStream fs = new FileStream("temp.xml",FileMode.OpenorCreate); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs,s); fs.Close(); fs = new FileStream("temp.xml",FileMode.OpenorCreate); After_Implementing_ISerializable d = (After_Implementing_ISerializable)bf.Deserialize(fs); fs.Close(); } } [Serializable] class Without_Implementing_ISerializable { int a; string b; public Without_Implementing_ISerializable(int a,string b) { this.a = a; this.b = b; } public void Check() { Without_Implementing_ISerializable s = new Without_Implementing_ISerializable(15,FileMode.OpenorCreate); Without_Implementing_ISerializable d = (Without_Implementing_ISerializable)bf.Deserialize(fs); fs.Close(); } } class Program { static void Main(string[] args) { Without_Implementing_ISerializable s = new Without_Implementing_ISerializable(5,"Five"); s.Check(); After_Implementing_ISerializable s1 = new After_Implementing_ISerializable(6,"Six"); s1.Check(); } } }
这是我得到的错误
"The constructor to deserialize an object of type 'Delete_This.After_Implementing_ISerializable' was not found."}
Percona Server 5.5或Windows上的MariaDB
AnonymousPipeServerStream.Read()偶尔挂起在客户端退出
为什么在WinForms(.NET)中隐藏一个拥有的窗口切换应用程序?
我如何使用C#读取扩展智能数据?
Windows应用程序Java Servletparameter passing
如何刷新未决的FileSystemWatcher事件?
为什么monodevelop需要.NET 3.5框架在Windows上运行?
在Windows文件系统中,每个文件都有一个预先计算的哈希值?
是否有可能以编程方式更改USB < – >串行转换器的“BM”延迟选项?
是的,您需要为实现ISerializable的类型实现序列化构造函数; 该序列化构造函数负责反序列化对象,就像使用GetobjectData方法进行序列化一样。
序列化构造函数看起来像这样,带有第一个参数SerializationInfo和第二个StreamingContext 。
protected ClassName(SerializationInfo info,StreamingContext context) { }
在提供的链接的备注部分谈论这个话题。
ISerializable接口意味着具有签名构造函数(SerializationInfo信息,StreamingContext上下文)的构造函数。 在反序列化的时候,只有在格式化程序将SerializationInfo中的数据反序列化之后才调用当前的构造函数。 一般来说,如果这个类没有被封装,这个构造函数应该被保护。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。