.Net序列化

.Net序列化

1.什么是序列化

序列化,它又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用

2.序列化的作用

以某种存储形式使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。

3..Net支持的对象序列化

(1) 二进制序列化

  public static void BinarySerialize()
        {
            //使用二進制序列化對象
            string fileName = Path.Combine(Constant.SerializePath, "BinarySerialize.txt");//文件名稱與路徑
            using (Stream fStream=new  FileStream(fileName,FileMode.Create,FileAccess.ReadWrite))
            {
                //需要一個Stream,這裡是直接寫入文件了
                List<Programmer> programmers = DataFactory.GetProgrammers();
                BinaryFormatter binaryFormatter = new BinaryFormatter();//創建一個二進制序列化器
                binaryFormatter.Serialize(fStream, programmers);
            }

            using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
            {
                //這裡需要一個Stream,這裡來源于文件
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                fStream.Position = 0;//重置流位置
                List<Programmer> pList= (List<Programmer>)binaryFormatter.Deserialize(fStream);//反序列化對象

            }
        }

(2) SOAP序列化

   public static void  SOAPSerialize()
        {
            //使用SOAP序列化對象
            string fileName = Path.Combine(Constant.SerializePath, "SOAPSerialize.txt");
            using (Stream fStream=new FileStream(fileName,FileMode.Create,FileAccess.ReadWrite))
            {
                List<Programmer> pList = DataFactory.GetProgrammers();
                //添加using System.Runtime.Serialization.Formatters.Soap;命名空間,通過引用右鍵添加
                SoapFormatter soapFormatter = new SoapFormatter();//創建SOAP序列化器
                //soapFormatter.Serialize(fStream, pList);Soap不能序列化泛型對象
                soapFormatter.Serialize(fStream, pList.ToArray());
            }

            using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
            {
                SoapFormatter soapFormatter = new SoapFormatter();
                fStream.Position = 0;
                List<Programmer> pList = ((Programmer[])soapFormatter.Deserialize(fStream)).ToList();
            }


        }

(3) XML序列化

    public static void XmlSerialize()
        {
            //使用xml序列化對象
            string fileName = Path.Combine(Constant.SerializePath, "Student.xml");
            using (Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite))
            {
                List<Programmer> pList = DataFactory.GetProgrammers();
                //添加using System.Xml.Serialization;命名空間
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Programmer>));//創建XML序列化器,需要指定對象的類型
                xmlSerializer.Serialize(stream, pList);
            }
            using (Stream fStream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
            {
                XmlSerializer xmlFormat = new XmlSerializer(typeof(List<Programmer>));//创建XML序列化器,需要指定对象的类型
                //使用XML反序列化对象
                fStream.Position = 0;//重置流位置
                List<Programmer> pList = pList = (List<Programmer>)xmlFormat.Deserialize(fStream);

            }
        }

(4) Json序列化

  public static void JsonSerialize()
        {
            List<Programmer> pList = DataFactory.GetProgrammers();
            string result = JsonHelper.ObjectToString<List<Programmer>>(pList);
            List<Programmer> pList1 = JsonHelper.StringToObject<List<Programmer>>(result);
        }

public class JsonHelper
    {
        public static string  ObjectToString<T>(T obj)
        {

            //添加 using System.Web.Script.Serialization;通過右鍵添加System.Web.Extensions
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return javaScriptSerializer.Serialize(obj);
        }

        public static T StringToObject<T>(string content)
        {
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            return    javaScriptSerializer.Deserialize<T>(content);
        }

        public static string ToJson<T>(T obj)
        {
            //添加using Newtonsoft.Json;,通過Nuget瀏覽Json.Net添加
          return   JsonConvert.SerializeObject(obj);
        }

        public static T ToObject<T>(string content)
        {
            return JsonConvert.DeserializeObject<T>(content);
        }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 .NET 中的反序列化方法来取出序列化后的数据。例如,可以使用 BinaryFormatter.Deserialize 方法来反序列化二进制数据,或者使用 XmlSerializer.Deserialize 方法来反序列化 XML 数据。具体的实现方式可以参考 .NET 的官方文档或者相关的教程。 ### 回答2: .NET序列化是一种将对象转换成可存储或传输的二进制格式的技术。在.NET框架中,可以使用序列化来将对象转换为字节数组,以便在不同的应用程序和平台之间进行数据交换。 序列化的过程可以简单描述为将对象的状态转换为字节流,以便在需要时能够将其还原回原始对象。 .NET提供了多种序列化方式,其中常用的有二进制序列化、XML序列化和JSON序列化。 使用.NET序列化进行数据的取得主要有两个方面的应用: 首先,可以将对象序列化后进行存储,以便在需要时进行读取和恢复。例如,我们可以将用户的配置信息进行序列化保存到本地文件中,然后在应用程序启动时读取并还原到内存中,以便使用。 其次,可以使用序列化来在不同的应用程序或平台之间进行数据交换。例如,一个.NET应用程序可以将对象序列化后通过网络发送给另一个.NET应用程序,接收方可以将接收到的字节流反序列化为对象并进行处理。 在.NET中使用序列化非常简单,只需将需要序列化的对象标记为[Serializable]属性,然后使用相应的序列化方法即可。例如,使用BinaryFormatter进行二进制序列化,使用XmlSerializer进行XML序列化,使用JsonSerializer进行JSON序列化等。 总之,通过.NET序列化,我们可以轻松地将对象转换为字节数组进行存储或传输,以便在需要时读取和恢复数据。这为我们在应用程序中进行数据存储和交换提供了便利。 ### 回答3: .NET序列化是指将对象转换成可以在网络传输、存储或持久化的二进制格式的过程。它可以将对象变成一个字节流,以便在需要时可以重新还原成对象。 .NET提供了多种序列化方式,其中常用的是XML序列化和Binary序列化。 XML序列化是将对象转换成XML格式的文档,可以使用XmlSerializer类实现。通过属性设置,可以控制序列化过程中的细节,例如指定对象成员是否需要序列化、设置对象成员别名等。XML序列化的优点是可以跨平台和跨语言,缺点是序列化后的文件比较大,效率较低。 Binary序列化是将对象转换成二进制格式的流,可以使用BinaryFormatter类实现。BinaryFormatter可以将对象完整地保存到二进制流中,并且可以进行压缩和加密操作。Binary序列化的优点是序列化后的文件较小,效率较高,但是只能在.NET平台上使用。 在序列化过程中,需要注意以下几点: 1. 要被序列化的对象必须标记为可序列化,可以使用[Serializable]属性进行标记。 2. 序列化的对象的成员如果不需要被序列化,可以使用[NonSerialized]属性进行标记。 3. 序列化后的数据可以进行持久化存储,可以写入到文件、数据库或者内存中。 4. 在反序列化时,需要使用相同的序列化方式和序列化版本来还原对象,否则可能导致反序列化失败。 总之,通过.NET序列化可以方便地将对象转换成二进制流,以便于传输、存储和持久化。根据使用场景和需求,可以选择合适的序列化方式来取出数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值