C# 序列化实现类的深拷贝
来源:互联网 发布:销售奖励政策 知乎 编辑:程序博客网 时间:2024/06/13 09:05
// [Serializable] 标记在类上方,我的这串代码就可以使用了
using System;using System.IO;using System.Reflection;using System.Reflection.Emit;using System.Runtime.Serialization.Formatters.Binary;static class Program{ [Serializable] public class Demo { } [STAThread] static void Main() { var _this = new Demo(); var _obj = demo.Clone(); } public static object Clone(this object obj) { var Dyn = new DynamicMethod("Clone", typeof(object), new Type[] { typeof(object) }); var MDIL = Dyn.GetILGenerator(); var NULL = new Type[] { }; var IL_0033 = MDIL.DefineLabel(); var IL_DE84 = MDIL.DeclareLocal(typeof(MemoryStream)); var Il_FA10 = MDIL.DeclareLocal(typeof(BinaryFormatter)); var Il_BCC2 = MDIL.DeclareLocal(typeof(Object)); var IL_CS10 = MDIL.DeclareLocal(typeof(Object)); MDIL.Emit(OpCodes.Newobj, typeof(MemoryStream).GetConstructor(NULL)); MDIL.Emit(OpCodes.Stloc_0); MDIL.Emit(OpCodes.Newobj, typeof(BinaryFormatter).GetConstructor(NULL)); MDIL.Emit(OpCodes.Stloc_1); MDIL.Emit(OpCodes.Ldloc_1); MDIL.Emit(OpCodes.Ldloc_0); MDIL.Emit(OpCodes.Ldarg_0); MDIL.Emit(OpCodes.Callvirt, typeof(BinaryFormatter).GetMethod("Serialize", new Type[] { typeof(MemoryStream), typeof(Object) })); MDIL.Emit(OpCodes.Ldloc_0); MDIL.Emit(OpCodes.Ldc_I4_0); MDIL.Emit(OpCodes.Conv_I8); MDIL.Emit(OpCodes.Ldc_I4_0); MDIL.Emit(OpCodes.Callvirt, typeof(MemoryStream).GetMethod("Seek", new Type[] { typeof(Int64), typeof(SeekOrigin) })); MDIL.Emit(OpCodes.Pop); MDIL.Emit(OpCodes.Ldloc_1); MDIL.Emit(OpCodes.Ldloc_0); MDIL.Emit(OpCodes.Callvirt, typeof(BinaryFormatter).GetMethod("Deserialize", new Type[] { typeof(MemoryStream) })); MDIL.Emit(OpCodes.Stloc_2); MDIL.Emit(OpCodes.Ldloc_0); MDIL.Emit(OpCodes.Callvirt, typeof(MemoryStream).GetMethod("Close", NULL)); MDIL.Emit(OpCodes.Ldloc_2); MDIL.Emit(OpCodes.Stloc_3); MDIL.Emit(OpCodes.Br_S, IL_0033); MDIL.MarkLabel(IL_0033); MDIL.Emit(OpCodes.Ldloc_3); MDIL.Emit(OpCodes.Ret); try { return Dyn.Invoke(Dyn, new object[] { obj }); } catch (Exception) { return null; } }}
0 0
- C# 序列化实现类的深拷贝
- C#通过序列化实现深拷贝
- C#对象的浅拷贝,深拷贝及利用序列化等多种方式实现深拷贝
- C#对象的浅拷贝、序列化深拷贝
- java 序列化实现对象的深拷贝
- C#中序列化实现深拷贝,实现DataGridView初始化刷新
- 使用序列化实现对象的拷贝
- 使用序列化实现对象的拷贝
- 序列化实现对象的拷贝
- 序列化实现对象的拷贝
- 使用序列化实现对象的拷贝
- 使用序列化实现对象的拷贝
- 如何通过序列化实现深拷贝
- 通过序列化实现深拷贝
- java提高篇-----使用序列化实现对象的拷贝 (深拷贝)
- C# 对象间的 深拷贝 实现
- Java深拷贝除了通过实现Cloneable接口,另外还可以通过序列化实现对象的拷贝。
- java提高篇-----使用序列化实现对象的拷贝
- LeetCode刷题笔录Triangle
- ubuntu FTP 搭建
- LAMP环境搭建
- codeforce 259C 最新题解 第二场
- Trie实践:一种比哈希表更快的数据结构
- C# 序列化实现类的深拷贝
- HTML ——表单标记(html控件)
- codeforce 259A 最新题解 第二场
- Android actionBar
- 13.7 Scramble String
- Codeforces Round #259 (Div. 2) C. Little Pony and Expected Maximum
- 【一维dp_线性扫描】Word Break 、Best time to Buy and Sell Stocks |||、max subarray、jump game |||
- Codeforces Round #259 (Div. 2) B. Little Pony and Sort by Shif
- 13.8 Minimum Path Sum