`
f002489
  • 浏览: 271919 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

序列化反序列化 (binary/xml) - 常用代码搜集,方便复用

    博客分类:
  • C#
 
阅读更多
http://blog.csdn.net/wuyazhe/article/details/5775666

二进制序列化

首先。你被序列化的类需要用[Serializable]特性修饰,例如:
view plain

    [Serializable] 
    public class AA 
    { 
        public int i = 5; 
    } 



那么你可以用如下方法序列化和反序列化:
view plain

    ///  <summary>   
    ///  序列化为二进制字节数组   
    ///  </summary>   
    ///  <param  name="request">要序列化的对象 </param>   
    ///  <returns>字节数组 </returns>   
    public static byte[] SerializeBinary<T>(T request) 
    { 
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
        System.IO.MemoryStream memStream = new System.IO.MemoryStream(); 
        serializer.Serialize(memStream, request); 
        return memStream.GetBuffer(); 
    } 
    ///  <summary>   
    ///  从二进制数组反序列化得到对象   
    ///  </summary>   
    ///  <param  name="buf">字节数组 </param>   
    ///  <returns>得到的对象 </returns>   
    public static T DeserializeBinary<T>(byte[] buf) 
    { 
        System.IO.MemoryStream memStream = new MemoryStream(buf); 
        memStream.Position = 0; 
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer = 
            new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
        T newobj = (T)deserializer.Deserialize(memStream); 
        memStream.Close(); 
        return newobj; 
    }  



调用方法

view plain

    AA p = new AA(); 
    p.i = 15; 
    byte[] bytes = SerializeBinary<AA>(p); 
    AA p2 = DeserializeBinary<AA>(bytes); 



源自另一博客的一个非泛型序列化方法,将其修改为泛型写法,主要是方便自己查找。

原文地址:http://www.cnblogs.com/luckeryin/archive/2009/06/05/1496698.html



XML序列化

view plain

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Xml.Serialization; 
    using System.IO; 
    namespace RegexActivator 
    { 
        public class ExtendMethods 
        { 
            public static void Serial<T>(T[] items, string path) 
            { 
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[])); 
                TextWriter writer = new StreamWriter(path); 
                try 
                { 
                    xmlSerializer.Serialize(writer, items); 
                } 
                finally 
                { 
                    writer.Close(); 
                } 
            } 
            public static T[] Deserial<T>(string path) 
            { 
                if (!File.Exists(path)) return new T[0]; 
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T[])); 
                FileStream fs = new FileStream(path, FileMode.Open); 
                T[] items; 
                try 
                { 
                    items = (T[])xmlSerializer.Deserialize(fs); 
                } 
                finally 
                { 
                    fs.Close(); 
                } 
                return items; 
            } 
        } 
    } 



c#序列化Hashtable的例子

view plain

    public void Test() 
    { 
        Hashtable hash = new Hashtable(); 
        hash.Add(1, "one"); 
        hash.Add(2, "two"); 
        hash.Add(3, "three"); 
        hash.Add(4, "four"); 
        //序列化 
        BinaryFormatter serializer = new BinaryFormatter(); 
        FileStream write_stream = new FileStream("my_hash.bin", FileMode.OpenOrCreate, FileAccess.Write); 
        serializer.Serialize(write_stream, hash); 
        write_stream.Close(); 
        //反序列化 
        FileStream reade_stream = new FileStream("my_hash.bin", FileMode.Open, FileAccess.Read); 
        BinaryFormatter deserializer = new BinaryFormatter(); 
        Hashtable newHash = (Hashtable)deserializer.Deserialize(reade_stream); 
        reade_stream.Close(); 
        foreach (var key in newHash.Keys) 
        { 
            Console.WriteLine("Key:" + key.ToString() + "/tValue:" + newHash[key].ToString()); 
        } 
    } 
分享到:
评论

相关推荐

    Visual Basic.NET 串行化参考手册

    - `System.Xml.Serialization` 命名空间的`XmlSerializer`类是进行XML序列化的常用工具。它可以将对象转换为XML文档,方便存储和传输。 - `BinaryFormatter` 类在`System.Runtime.Serialization.Formatters.Binary...

    kotlinx.serialization:Kotlin多平台多格式序列化

    2. **序列化和反序列化**: 库的核心功能是将Kotlin对象序列化为字节流或字符串,同时也能从这些表示中反序列化回对象。通过注解`@Serializable`,开发者可以指定哪些类和属性应参与序列化过程。例如: ```kotlin ...

    c#泛型序列化对象为字节数组的示例

    在C#编程中,序列化和反序列化是常见的数据处理技术,主要用于将对象的状态转换为可存储或传输的形式,然后还原回原来的对象状态。在本示例中,我们将探讨如何利用泛型来实现对象到字节数组的序列化以及字节数组到...

    100个C#辅助类

    - `SerializationHelper`:XML、JSON、Binary等形式的序列化和反序列化。 8. **缓存**: - `CacheHelper`:提供内存缓存、分布式缓存的简单接口。 9. **线程与并发**: - `ThreadHelper`:线程创建、同步、定时...

    Java.net面试不求人

    - 可以通过设置序列化格式为二进制(Binary),并利用WebService进行数据传输,客户端接收后进行反序列化。这种方式相比直接传输数据集更高效。 ### 11. 反射 - 反射提供了获取运行时类型信息的能力,可以通过反射...

    Utility基础类大全_CN.rar

    5. **数据序列化与反序列化**: SerializationUtil类可能提供了XML、JSON、Binary等形式的数据序列化和反序列化功能,方便数据的保存和传输。例如,`SerializationUtil.JsonSerialize(object obj)`可以将对象转换为...

    TCP/IP实用游戏服务端程序C#

    5. **数据序列化与反序列化**:在游戏服务端,数据通常以结构化的形式(如JSON、XML或自定义二进制格式)在网络间传输。C#提供System.Runtime.Serialization.Formatters.Binary.BinaryFormatter类进行二进制序列化,...

    C#开发典型模块大全完整光盘源码

    14. **序列化与反序列化**:XML、JSON或Binary格式的数据序列化和反序列化,用于数据持久化和网络通信。 15. **安全性**:如数据加密解密、权限控制、安全编码等,确保应用程序的安全性。 以上只是部分可能涉及的...

    C sharp辅助类

    7. **序列化与反序列化**:`SerializationHelper`可能包含JSON、XML、Binary等形式的数据序列化和反序列化功能。 8. **加密解密**:`CryptoHelper`类用于实现各种加密算法,如AES、DES、RSA等。 9. **缓存管理**:...

    Python库 | grpcio-1.1.0-cp34-cp34m-manylinux1_i686.whl

    protobuf是Google开发的一种数据序列化协议,用于定义消息结构和交换数据。它支持多种语言,并且比JSON或XML更高效。Stub则是gRPC在客户端和服务端的代理对象,它们实现了.proto文件中定义的服务接口,使得开发者...

    save

    例如,JSON或XML格式常用于数据交换,C#中的`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`用于二进制序列化,这些都是保存数据的有效方式。 4. **版本控制工具**:在源码管理中,像Git这样的...

    Python库 | grpcio-1.33.1-cp36-cp36m-manylinux2014_i686.whl

    它提供了比XML更紧凑、更快、更简单的序列化方式,同时也支持多种编程语言。 2. **服务定义**:在gRPC中,服务通过protobuf定义,描述了服务的方法和它们的输入/输出类型。这些定义通常存储在.proto文件中。 3. **...

    PyPI 官网下载 | grpcio-1.11.0-cp34-cp34m-win32.whl

    ProtoBuf是一种序列化协议,它是Google开发的数据交换格式。它允许开发者定义数据结构,然后可以生成跨语言的代码来方便地读写这些结构化数据。ProtoBuf的优点在于它比XML或JSON更紧凑、更快速,且更易于处理。 **...

    图书管理系统,大一实习

    - **序列化**:将对象转换为文本格式存储,如JSON或XML,便于持久化数据。 4. **异常处理** - 使用`try-catch`结构捕获并处理可能出现的错误,如打开文件失败、非法输入等。 5. **标准库与算法** - **容器**:...

    chuk.Helpers

    14. **序列化与反序列化(Serialization and Deserialization)**:数据交换和持久化时,库可能提供了XML、JSON、Binary等不同格式的序列化和反序列化方法。 15. **线程安全的集合(Thread-Safe Collections)**:...

    ibatis参考文档

    在需要序列化的场景下,可以选择使用可序列化的读写缓存。 ##### 3. Cache Types iBATIS支持多种缓存类型,包括LruCache、FifoCache等,可以根据实际需求选择。 #### 十、Dynamic Mapped Statements iBATIS支持...

    《计算机英语词汇表》(高清晰pdf版)

    "library"(库)是预编译的代码集合,方便开发者复用。 "style"和"appearance"(样式和外观)在UI设计中指元素的视觉呈现。"compiler"(编译器)负责将源代码转换为目标代码。"debug"(调试)是查找并修复代码错误...

    CocosCreator系列教程——如何将.apk解压出来的.atlas文件转成.plist文件

    而.plist文件则是一种XML或者Binary格式,常用于iOS和Unity等平台,用来描述纹理 atlas 的布局和每个子图块的信息,通常与.png图片文件一起使用。 转换过程涉及到解析.atlas文件的内容并重新组织成.plist文件的结构...

Global site tag (gtag.js) - Google Analytics