什么是对象序列化和反序列化 ?
并系列化与喜欢阅读对象的属性,然后填充一个DataRow的列与他们终于节省DB DataRow中正常的技术有什么区别?
什么是对象序列化和反序列化 ?
并系列化与喜欢阅读对象的属性,然后填充一个DataRow的列与他们终于节省DB DataRow中正常的技术有什么区别?
序列一般是指创建版本,可以(可能在文件中)被用于存储的数据(而不是对象)的,用于转移在网络上,或者只是用于之间处理/传送AppDomain
上的单个的/ etc机。
序列化通常是指作为一个字符串(认为:XML / JSON)写入数据或作为原始二进制(一个byte[]
等)。 反序列化是相反的过程; 取原始数据(从一个文件,从进入的网络套接字等),并重建所述对象模型。
使用DB之间的区别在于,它没有内在的表格布局,并没有真正的领带的数据库; 数据可以是任何形状,并趋于比对表的行/列性质更紧密地映射到面向对象的布局。
大多数平台上有一系列的序列化工具。 例如,它听起来就像你在谈论.NET -这样BinaryFormatter
(.NET专用), XmlSerializer
, DataContractSerializer
,Json.NET和protobuf网/ DOTNET-protobufs将所有符合条件。
系列化=把对象的相关状态转变成可流表示。 这可能意味着将其转换为字节流。 这并不包括复制每一个成员变量到流。 即在有效的Java使用由Joshua布洛赫典型的例子是一个HashSet。 你只想序列化HashSet中的元素,但没有钥匙。
反序列化=从串行表示恢复的对象,保证了对象的不变量。 反序列化可以被认为是该对象的单独构造。 在上面你提到将创建一个新的HashSet,然后插入从流值到这个新的数据结构中的HashSet的情况。
序列化意味着,你坚持你的对象成表示,你可以在一些地方保存。 这样做的一个办法就是把鼠标指针到你的对象存储在存储器中,因为它是一个文件的每一个字节写。 因为这表示是非常具体的编程语言(以及它如何代表了内存中的对象),得以改善,将是你的对象转换为具有一定众所周知的结构(如XML或JSON)的字符串表示,这样你能够
一)转让更容易
B)保存和恢复更容易
C)由于大家都知道的格式是如何定义的,任何其他程序可以读取你的对象,太
所以,把你的对象到数据库的序列化只是另一种形式了。
反序列化意味着,你可以加载/从那里将它保存到再次还原该对象。
序列化,通常,在运行时写一个对象的状态到磁盘(但它可以在任何地方),并能再次阅读它的过程。
有效地,存储一个对象的属性到一个表是序列化的一种形式。
在.NET中,还有其他的形式:
你可以弥补自己的。
但在一般情况下,如果你的地方保存对象的状态,然后再阅读它放回在运行时一个“活”的对象,你是连载的。
序列化
序列化是一个对象或一组对象的图表转换成流的过程。
反序列化
反序列化是流转换回对象或一组对象图的处理。
下面是一些自定义的属性:
[OnDeserialization] - >据时,我们需要的流的反序列化过程执行一些动作使用。 [OnDeserialized] - >它是一个当我们需要执行一些动作反序列化流成一个对象后使用。 如正确设置对象的字段值
下面是例子
[Serializable]
internal class DemoForSerializableAndDeserializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializableAndDeserializable objDemo)
{
DemoForSerializableAndDeserializable objSer = new DemoForSerializableAndDeserializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnDeserializing]
private void OnDeserializing(StreamingContext context)
{
// Do some work while deserializing the stream
}
[OnDeserialized]
private void OnSerialized(StreamingContext context)
{
Fname = "abc";
}
}
长途区号
class CallingCode
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializableAndDeserializable demo = new DemoForSerializableAndDeserializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializableAndDeserializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializableAndDeserializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}