我试图打破一些冰。请看一下。
用名称创建类
MyXMLSerializer
这样地:
public class MyXMLSerializer
{
delegate void del_xmlSerializing();
del_xmlSerializing ds;
delegate void del_xmlSerialized(System.IO.Stream stream, object o);
AsyncCallback cb;
del_xmlSerialized dd;
delegate void del_xmlDeserializing();
del_xmlDeserializing dx;
delegate object del_xmlDeserialized(System.IO.Stream stream);
AsyncCallback db;
del_xmlDeserialized xd;
object FinalDeserializedObject = null;
public MyXMLSerializer()
{
}
public void Serialize(System.IO.Stream stream,object o,Type ClassType)
{
XmlSerializer xx = new XmlSerializer(ClassType);
/* ON Serialization Beginning [ONSERIALIZING] */
ds = new del_xmlSerializing(OnXMLSerializing_Begin);
IAsyncResult IAR_Begin = ds.BeginInvoke(null, null);
ds.EndInvoke(IAR_Begin);
/* ON Serialization Beginning [ONSERIALIZING] */
/* ON Serialization Completed ie [ONSERIALIZED] */
dd = new del_xmlSerialized(xx.Serialize);
cb = new AsyncCallback(OnXMLSerializing_Completed);
IAsyncResult IAR = dd.BeginInvoke(stream, o, cb, dd);
// This Delay Is Important Otherwise The Next Line Of Code(From Where Serialize Is Called)
// Gets Executed Prior To Conclusion Of EndInvoke, Consequently Throwing Exception.
while (IAR.IsCompleted == false) Thread.Sleep(1);
/* ON Serialization Completed ie [ONSERIALIZED] */
}
public object Deserialize(System.IO.Stream stream,Type ClassType)
{
XmlSerializer xx = new XmlSerializer(ClassType);
/* ON De-Serialization Beginning [ONDESERIALIZING] */
dx = new del_xmlDeserializing(OnXMLDeserializing_Begin);
IAsyncResult IAR_Begin = dx.BeginInvoke(null, null);
dx.EndInvoke(IAR_Begin);
/* ON De-Serialization Beginning [ONDESERIALIZING] */
/* ON De-Serialization Completed [ONDESERIALIZED] */
xd = new del_xmlDeserialized(xx.Deserialize);
db = new AsyncCallback(OnXMLDeserialization_Completed);
IAsyncResult IAR = xd.BeginInvoke(stream, db, xd);
// This Delay Is Important Otherwise The Next Line Of Code(From Where Serialize Is Called)
// Gets Executed Prior To Conclusion Of EndInvoke ,Consequently Throwing Exception.
while (IAR.IsCompleted == false) Thread.Sleep(1);
return FinalDeserializedObject;
/* ON De-Serialization Completed [ONDESERIALIZED] */
}
private void OnXMLDeserialization_Completed(IAsyncResult I)
{
del_xmlDeserialized Clone = (del_xmlDeserialized)I.AsyncState;
FinalDeserializedObject = Clone.EndInvoke(I);
OnDeserialized();
}
public virtual void OnSerialized()
{
MessageBox.Show("Serialization Completed");
}
public virtual void OnDeserialized()
{
MessageBox.Show("Deserialization Completed");
}
private void OnXMLSerializing_Completed(IAsyncResult I)
{
del_xmlSerialized Clone = (del_xmlSerialized)I.AsyncState;
Clone.EndInvoke(I);
OnSerialized();
}
private void OnXMLDeserializing_Begin()
{
//Thread.Sleep(5000);
OnDeserializing();
}
public virtual void OnDeserializing()
{
MessageBox.Show("Beginning Deserialization");
}
private void OnXMLSerializing_Begin()
{
//Thread.Sleep(5000);
OnSerializing();
}
public virtual void OnSerializing()
{
MessageBox.Show("Beginning Serialization");
}
}
现在按名称创建另一个类
TotalRecall
继承
MyxML串行化器
像这样的类:
public class TotalRecall:MyXMLSerializer
{
public override void OnSerialized()
{
MessageBox.Show("Yippeeee!!!!!,I Finally Managed To Wire [ONSERIALIZED] Event With XMLSerializer.My Code Upon XML Serialized[ONSERIALIZED] Goes Here..");
//base.OnSerialized();
}
public override void OnSerializing()
{
MessageBox.Show("Yippeeee!!!!!,I Finally Managed To Wire [ONSERIALIZING] Event With XMLSerializer.My Code Upon XML Serializing[ONSERIALIZING] Goes Here..");
//base.OnSerializing();
}
public override void OnDeserializing()
{
MessageBox.Show("Yes!!!!!,I Finally Managed To Wire [ONDESERIALIZING] Event With XMLSerializer.My Code Upon XML De-Serializing[ONDESERIALIZING] Goes Here..");
//base.OnDeserializing();
}
public override void OnDeserialized()
{
MessageBox.Show("Yes!!!!!,I Finally Managed To Wire [ONDESERIALIZED] Event With XMLSerializer.My Code Upon XML De-Serialized[ONDESERIALIZED] Goes Here..");
//base.OnDeserialized();
}
}
现在创建一个窗体(我已经创建了一个Windows窗体)。
在上面用名称创建两个按钮
Button1
和
Button2
(默认值)。我的完整表单代码是:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TotalRecall xx = new TotalRecall();
Employee ee = new Employee();
FileStream fs = File.Create("sss.xml");
xx.Serialize(fs, ee, typeof(Employee));
fs.Close();
fs.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
TotalRecall xx = new TotalRecall();
FileStream fs=File.OpenRead("sss.xml");
Employee ee = (Employee)xx.Deserialize(fs, typeof(Employee));
fs.Close();
fs.Dispose();
}
}
请在复制粘贴过程中忽略的任何位置包含命名空间。