我試圖進行ISerializable,並在此難住。我做了兩個具有「Serializable」屬性的類。只有一個類派生自ISerializable,併爲其定義了GetObjectData。讓我們調用這個類A.另一個不是從那裏通過GetObjectData派生出來的ISerializable沒有爲它定義。讓我們把這個類叫做B.我沒有爲類A提供任何特殊的構造函數。現在在運行時類A中顯示錯誤,如「Special constructor is missing」。兩個類的語法都是相同的。所以,錯誤可能是一些其他的事情,但它不應該是關於構造函數。否則,我也應該得到類B的相同錯誤。請參閱下面的代碼。有人可以說它背後的原因嗎?
注:我使用Windows 7 - 64位與Visual Studio 2010反序列化類型T的對象的構造函數未找到
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, "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);
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."}
@Raymond謝謝你對主題的很好的修改 – prabhakaran