序列化 (serialization)
将对象的状态信息转换为可以存储或传输的窗体的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission。在默认策略下,通过 Internet 下载的代码或 Intranet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。
通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。
对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。
.NET Framework 提供两种序列化技术:
* 二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。
* XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。SOAP 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。
下面是一个序列化的例子:摘自于MSDN
该程序运行在Console应用程序下:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace Microsoft.Samples.CustomOrder
{
public class OrderedClass
{
private int field1;
private string field2;
private string field3;
[XmlElement(Order = 3)]
public string Field3
{
get { return field3; }
set { field3 = value; }
}
[XmlElement(Order = 1)]
public int Field1
{
get { return field1; }
set { field1 = value; }
}
[XmlElement(Order = 2)]
public string Field2
{
get { return field2; }
set { field2 = value; }
}
public OrderedClass()
{
field1 = 1;
field2 = "String1";
field3 = "String2";
}
}
public class UnorderedClass
{
private int field1;
private string field2;
private string field3;
public string Field3
{
get { return field3; }
set { field3 = value; }
}
public int Field1
{
get { return field1; }
set { field1 = value; }
}
public string Field2
{
get { return field2; }
set { field2 = value; }
}
public UnorderedClass()
{
field1 = 1;
field2 = "String1";
field3 = "String2";
}
}
static class Program
{
static void Main()
{
UnorderedClass unordered = new UnorderedClass();
OrderedClass ordered = new OrderedClass();
XmlSerializer unorderedSerializer =
new XmlSerializer(typeof(UnorderedClass));
XmlSerializer orderedSerializer =
new XmlSerializer(typeof(OrderedClass));
Console.WriteLine("Unordered serialization:\n");
unorderedSerializer.Serialize(Console.Out, unordered);
Console.WriteLine("\n\nOrdered serialization:\n");
orderedSerializer.Serialize(Console.Out, ordered);
Console.ReadLine();
}
}
}
分享到:
相关推荐
数据的序列化和反序列化 Serialization DeSerialization
序列化(Serialization)是Java系统中处理对象或对象图的过程,通过创建它们的序列化表示形式来创建。序列化的对象值和类型包含足够的信息,以确保可以重新创建出等效类型的对象。反序列化(Deserialization)是从...
Boost.Serialization库是C++社区广泛使用的序列化工具,它提供了丰富的功能来处理各种类型的对象,包括智能指针。在C++11及更高版本中,智能指针(如`std::unique_ptr`,`std::shared_ptr`和`std::scoped_ptr`)被...
Boost.Serialization提供了两种主要的序列化方式:文本序列化和二进制序列化。文本序列化通常更易于阅读和调试,但占用的存储空间较大;而二进制序列化则更为紧凑,节省空间,但可能难以直接查看。 1. **文本序列化...
在C#中,我们可以使用.NET框架提供的`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类来进行二进制序列化,或者使用`System.Xml.Serialization.XmlSerializer`来进行XML序列化。而在Java中,...
在***中处理JSON的序列化和反序列化是Web开发中常见的需求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,由于其简洁性和易于阅读性,被广泛用于服务器与客户端之间的数据传输。下面将详细介绍**...
在Java中,序列化(Serialization)是指将一个对象转换为字节流的过程,这个字节流可以保存到磁盘上,或者通过网络进行传输。要实现一个对象的序列化,该对象的类必须实现`Serializable`接口。这是一个标记接口,...
### 探讨和比较Java与.NET的序列化框架 #### 序言 序列化作为支持面向对象编程中“持久性”这一重要概念的关键技术,在现代软件开发中扮演着至关重要的角色。无论是Java还是.NET这样的主流开发平台,序列化都是其...
这时,FST(Fast Serialization Toolkit)作为一个高效且JDK兼容的序列化库,提供了更快的速度和更小的内存占用,成为了Java开发者的一个优秀选择。 FST的主要特点包括: 1. **高性能**:FST通过优化的序列化算法...
在编程领域,序列化和反序列化是两个关键的概念,特别是在数据存储、网络传输和对象持久化等场景中。它们允许我们将对象的状态转换为字节流(序列化),然后在需要的时候将字节流还原为原来的对象(反序列化)。在C#...
XML序列化与反序列化是.NET框架中处理数据交换的重要技术,它允许我们将对象的状态转换为XML格式的数据,也可以将XML数据恢复为等效的对象。这个实战项目专注于使用C#实现这一过程,使得开发者能够方便地在XML文件和...
在C#中,可以使用`System.Runtime.Serialization.Formatters.Binary.BinaryFormatter`类实现二进制序列化。在描述中提到,`Student`对象包含了图片,这种情况下二进制序列化可以高效地处理图像数据,因为它是原始...
akka-kryo-serialization, 基于Kryo的Akka序列化 akka-kryo-serialization-- Scala 和Akka基于kryo的序列化程序这个库为 Scala 和Akka提供定制的基于kryo的序列化程序。 它可以用于更高效的akka远程处理。它还可以...
Kotlinx.Serialization是一个强大的开源库,专门为Kotlin编程语言提供了跨平台的序列化解决方案。这个库允许开发者将数据对象转换成字节流或JSON等不同格式,反之亦然,这对于数据交换、存储和网络通信至关重要。它...
C#中的`System.Runtime.Serialization`命名空间提供了多种序列化工具,如`DataContractSerializer`、`XmlSerializer`和`JsonSerializer`等。 - `DataContractSerializer`:主要用于WCF服务,提供高效的序列化,并...
在C#中,我们可以使用`System.Xml.Serialization`命名空间下的`XmlSerializer`类来实现XML序列化。这个过程可以将一个复杂的对象结构转换成XML字符串,方便存储或在网络上传输。 方法一:反序列化取节点KV值 这种...
在VB.NET中,可以使用`System.Xml.Serialization`命名空间中的`XmlSerializer`类来实现XML的序列化和反序列化。 1. **XML序列化**:将对象实例转换为XML字符串。这通常通过创建一个`XmlSerializer`实例,然后调用其...
- **DataContractSerializer序列化**:`System.Runtime.Serialization.DataContractSerializer` 是专为WCF(Windows Communication Foundation)设计的序列化器,它支持XML,但比 `XmlSerializer` 更加高效。...
在软件开发过程中,特别是涉及数据持久化、远程通信等场景时,序列化(Serialization)和反序列化(Deserialization)是非常重要的技术手段。它们允许将对象的状态转换为一种可以存储或传输的形式,并能够在需要时...
Java序列化(Serialization)是一项重要的功能,它可以将对象的状态转化为一系列字节,从而实现对象的持久化存储或在网络上传输。序列化机制使得Java对象能够在不同的平台之间进行传输,并且能够保持其原始状态。 *...