linux 数据序列化,C# 数据的序列化存取

1,什么是序列化?

序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。在默认策略下,通过 Internet 下载的代码或 Intranet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。

2.为什么使用序列化?

a. 一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本。我们经常需要将对象的字段值保存到磁盘 中,并在以后检索此数据。尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可 以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁盘还原这些字段和属性。序列化提供了轻松实现这个目标的快捷方法。

b.另一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。例如,序列化可用于在 ASP.NET 中保存会话状态并将对象复制到 Windows 窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。

(序列化技术的主要两个目的是:持久化存、储按值封送、数据保护。)

3怎样进行序列化和反序列化?

a .XML序列化

添加System.Runtime.Serialization.Formatters.Binary命名空间;

b. 二进制序列化

添加System.Xml.Serialization命名空间;

NoSerialized属性被Xmllgnore属性替代;

c.soap序列化

典型应用:web service.

下面看一下二进制序列化:

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Runtime.Serialization;

using System.Runtime.Serialization.Formatters.Binary;

using System.Text;

using System.Threading.Tasks;

namespace serial1

{

///

/// Person类的序列化

///

[Serializable]

public class Person

{

public string Sno { get; set; }

public string Name { get; set; }

public string Sex { get; set; }

public int Age { get; set; }

public string Other { get; set; }

//非序列化的属性

[NonSerialized]

public string NoSerial;

///

/// 成员函数

///

///

public string DisplayInfo()

{

return "我的学号是:" + Sno + "\n我的名字是:" + Name + "\n我的性别为:" + Sex + "\n我的年龄:" + Age + "\n非序列化:" + NoSerial+"\n";

}

}

class Program

{

static void Main(string[] args)

{

//实例化两个对象

var me = new Person

{

Sno = "1215115231",

Name = "wuzhang",

Sex = "man",

Age = 22,

NoSerial="不被序列化1",

Other = "\n"

};

var he = new Person

{

Sno = "1215115250",

Name = "wanggang",

Sex = "man",

Age = 21,

NoSerial = "不被序列化2",

Other = "\n"

};

List personInfo = new List();

personInfo.Add(me);

personInfo.Add(he);

//创建一个格式化程序的实例

IFormatter formatter = new BinaryFormatter();

//创建一个文件流

if (!File.Exists("F:\\TestTxt.txt"))

{

//FileStream fs1 = new FileStream("F:\\TestTxt.txt", FileMode.Create, FileAccess.Write);//创建写入文件

Stream stream = new FileStream("F:\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

foreach(Person per in personInfo)

{

formatter.Serialize(stream, per);

}

stream.Close();

}

else

{

Stream stream = new FileStream("F:\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);

foreach (Person per in personInfo)

{

formatter.Serialize(stream, per);

}

stream.Close();

}

Stream destream = new FileStream("F:\\TestTxt.txt", FileMode.Open,

FileAccess.Read, FileShare.Read);

var stillme = (Person)formatter.Deserialize(destream);

var stillme1 = (Person)formatter.Deserialize(destream);

Console.WriteLine(stillme.DisplayInfo());

Console.WriteLine(stillme1.DisplayInfo());

destream.Close();

Console.ReadLine();

}

}

}

运行结果:

effcab6c3dded9025cdfd8e439860b44.png

7d5e9ec883c903cf52c428d0892f46d0.png

8fe9d3f9fcd858af1338bdea44b6b9e4.png

其它两种方式就不再实验了,搞定!

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值