Ich habe versucht, die ISerializable und ratlos auf diesem. Ich habe zwei Klassen mit dem Attribut "Serialisierbar" gemacht. Nur eine Klasse wurde von ISerializable abgeleitet und GetObjectData wurde dafür definiert. Nennen wir diese Klasse A. Eine andere wurde nicht von ISerializable abgeleitet, da GetObjectData dafür nicht definiert wurde. Lassen Sie uns diese Klasse als B nennen. Ich habe keinen speziellen Konstruktor für die Klasse A zur Verfügung gestellt. Jetzt zeigt Klasse A in der Laufzeit den Fehler wie "Spezialkonstruktor fehlt". Die Syntax ist für beide Klassen gleich. Der Fehler kann also eine andere Sache sein, aber es sollte nicht den Konstruktor betreffen. Ansonsten sollte ich den gleichen Fehler auch für Klasse B bekommen. Siehe den folgenden Code. Kann jemand den Grund dafür sagen?
Anmerkung: Ich bin windows 7 mit - 64 Bit mit Visual Studio 2010.Der Konstruktor zum Deserialisieren eines Objekts vom Typ T wurde nicht gefunden
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();
}
}
}
Ja Dies ist der Fehler, den ich bekam
"The constructor to deserialize an object of type 'Delete_This.After_Implementing_ISerializable' was not found."}
@Raymond danke für die nette Bearbeitung zum Thema – prabhakaran