110,536
社区成员
发帖
与我相关
我的任务
分享
[Serializable]
public class MyDataBase
{
public List<SinaLogin.UserInfo> MyUserList = new List<SinaLogin.UserInfo>();
}
/**/
/// <summary>
/// 将一个object对象序列化,返回一个byte[]
/// </summary>
/// <param name="obj">能序列化的对象</param>
/// <returns></returns>
public static byte[] ObjectToBytes(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
return ms.GetBuffer();
}
}
/**/
/// <summary>
/// 将一个序列化后的byte[]数组还原
/// </summary>
/// <param name="Bytes"></param>
/// <returns></returns>
public static object BytesToObject(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
IFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(ms);
}
}
public static void save(string Path, object SenderFile)
{
byte[] tempdata = ObjectToBytes(SenderFile);
File.WriteAllBytes(Path, tempdata);
}
public static object inputfile(string Path)
{
byte[] tempdata = File.ReadAllBytes(Path);
return BytesToObject(tempdata);
}
例如MyDataBase类 必须标识可序列化
不然执行save 这个方法会提示该列不可序列化
SinaLogin.UserInfo 这个类也得标识可序列化。
Public string Emps()
{
EmpManager emp = new EmpManager();
List<Emp> empInfos = emp.GetInfos();
//仅是例子,.NET 没有对应的类或方法
return Json.Serialized(empInfos);
}
,但对于客户端是不认识这个对象的也是无法转输时,因此我们可以将List<Emp>转换为JSON或XML格式,这就是一种序列化,当客户端收到这个string时,又将转换为对象集合时,叫反序列化。
所以我们给Emp类加[Serializable]特性时,就表示Emp类可以被序列化,只有可以被序列化的类才能可以被反序列化,但使用[Serializable]特性进行序列化,也只有.NET 才能反序列化,当然也可以根据.NET 的序列化算法,用Java编写一个反序列化方法,但这种方法就不合适了,因此跨平台的时候,我们通常用通用的序列化方法如Json或Xml等,也可能用开源跨平台的序列化工具如 Google Protobuf。
如有不对请大家指正。
[DefaultEvent( " FormClosed " )]
public partial class Form1 : Form{}
然后新建一个窗口Form2继承自Form1
public partial class Form2 : Form1{}
最后切换到Form2的窗体设计器上,双击窗体自动生成代码:
private void Form2_FormClosed( object sender, FormClosedEventArgs e){}
看到了吧,这就是改变控件默认事件的特性
注意,这里一直说的是XXX类,没错,他就是一个类。所有特性都以单词“Attribute”结束,但是所有特性都可以省略“Attribute”使用。Serializable原名叫SerializableAttribute。中括号中使用特性其实就是调用它的构造函数,所以有些特性可以加参数。
http://msdn.microsoft.com/zh-cn/library/z0w1kczw.aspx
最后说说你说的[Serializeble],他是给序列化和反序列化用的,标识有这个特性的类才能够被序列化。序列化是一种将一个对象的状态(实例变量)持久化到文件中,反序列化就是从这个格式化的文件中读取对象的状态恢复我们保存的对象。用来比如保存程序的当前状态,下次再启动时恢复到上次的状态。具体你可以搜"C#序列化"
或者看这里:http://www.cnblogs.com/LiZhiW/p/3622365.html