C#,struct,class,使用BinaryFormatter将对象序列化
来源:互联网 发布:服装生产软件 编辑:程序博客网 时间:2024/05/21 17:16
拷贝的别人的代码
namespace ClassAndStructTest{ //这是一个class,是一种引用类型,没有用Serializable进行标示,因此不能被序列化 class ClsA { public string s1; public int i2; } [System.Serializable]//标示了这个类可以被序列化,这个类无法被继承 class ClsB { public string s1; public int i2; } //这是一个struct,是一种值类型, struct StructA { public string s1; public int i2; } class Program { public static void Main() { //ca2和ca1共用了一块内存. ClsA ca1 = new ClsA(); ca1.s1 = "ca1"; ClsA ca2 = ca1; ca2.s1 = "ca2"; System.Console.WriteLine("ca1.s1={0}", ca1.s1); //sa2和sa1使用了不同的内存. StructA sa1 = new StructA(); sa1.s1 = "sa1"; StructA sa2 = sa1; sa2.s1 = "sa2"; System.Console.WriteLine("sa1.s1={0}", sa1.s1); //因为重新生成了一块内存,所以没啥说的, ClsB cb1 = new ClsB(); cb1.s1 = "cb1"; ClsB cb2 = ObjectCopy.DeepCopy(cb1); cb2.s1 = "cb2"; System.Console.WriteLine("cb1.s1={0}", cb1.s1); return; } } public class ObjectCopy : System.Object { /// <summary> /// 代码来源http://bbs.csdn.net/topics/390307567 /// 深度拷贝,相当于new,也就是在内存中重新创建,不受原来属性的改变而改变 /// 错误消息: Additional information: 程序集“xxx”中的类型“yyy”未标记为可序列化。 /// 解决方案: [System.Serializable] /// </summary> public static T DeepCopy<T>(T obj) { T objResult; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { //该方法要求:如果当前类的某个属性也是一个对象,则要求该属性对象要序列化 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); bf.Serialize(ms, obj); ms.Position = 0; objResult = (T)bf.Deserialize(ms); } return objResult; } /// <summary> /// 该方法默认的是浅克隆,即不会克隆对象引用的对象[比如person属性中Address,或者是个整形数组],而只是简单地复制这个引用. /// MemberwiseClone方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象. /// 如果字段是值类型的,则对该字段执行逐位复制.如果字段是引用类型(字符串很特殊),则复制引用但不复制引用的对象;因此,原始对象及其副本引用同一对象. /// </summary> public System.Object ShallowCopy() { return this.MemberwiseClone(); } /// <summary> /// 这个函数很显然运行时会抛出异常 -_-! /// </summary> public static T ShallowCopy<T>(T obj) { var x1 = (System.Object)obj; var x2 = (ObjectCopy)x1; var x3 = x2.ShallowCopy(); var x4 = (T)x3; return x4; } }}
完。
0 0
- C#,struct,class,使用BinaryFormatter将对象序列化
- 使用BinaryFormatter()序列化对象方法
- 使用BinaryFormatter进行序列化
- 对象序列化 BinaryFormatter、XmlSerializer、SoapFormatter
- SoapFormatter 和 BinaryFormatter 序列化对象
- [C#]BinaryFormatter、SoapFormatter、XML3种序列化
- BinaryFormatter序列化
- 序列化之一 BinaryFormatter
- BinaryFormatter序列化与反序列化(C#)
- 在 WCF 中使用高效的 BinaryFormatter 序列化
- 在 WCF 中使用高效的 BinaryFormatter 序列化
- 在 WCF 中使用高效的 BinaryFormatter 序列化
- 不同Assembly中使用 BinaryFormatter 序列化的问题
- 使用boost 库 将结构struct 序列化
- 对象串行化----BinaryFormatter简介
- 使用Remoting 技术将对象序列化
- C# BinaryFormatter序列化对象保存后,不能改变命空间
- BinaryFormatter 序列化反序列化
- POJ-1416 Shredding Company(DFS)
- STM32根据库建立自己的工程
- 设计模式-行为型- 状态模式(State)
- mysql插入数据后返回自增ID的方法
- SurfaceView 试用
- C#,struct,class,使用BinaryFormatter将对象序列化
- Jdbc对Mysql数据库的基本操作
- OC-类目
- function详解 c++
- SDUT OJ 2143 图结构练习——最短路径
- oracle 体系结构
- HTTP协议详解
- caffe绘制训练过程的loss和accuracy曲线
- Android Drawable之ClipDrawable