业务实体对象(Business Entity Object)的序列化

 

Written by: Rickie Lee

Dec. 12, 2004

 

在分布式应用系统中,层与层之间的数据,如业务实体对象、DataSetTyped DataSet等等,传递需要将对象序列化。其中.Net Framework内置支持DataSet, Typed DataSet对象的序列化。这里要讨论的是自定义业务实体对象(Business Entity Object)的序列化。

 

1. 使用 XmlSerializer 序列化自定义实体对象

将对象序列化到 XML 文档中和从 XML 文档中反序列化对象。XML 序列化是将对象的公共属性和字段转换为序列格式(这里是指 XML)以便存储或传输的过程。反序列化则是从 XML 输出中重新创建原始状态的对象。因此,可以将序列化视为将对象的状态保存到流或缓冲区的方法。

若要序列化对象,请调用 Serialize 方法。若要反序列化对象,请调用 Deserialize 方法。

 

以下代码示例显示了如何使用 XmlSerializer 类将EmployeeEntity 对象序列化为 XML 格式:

using System.Xml.Serialization;    // 用于XmlSerializer

 

// 创建一个 XmlSerializer 对象,用于序列化 EmployeeEntity 类型的对象

XmlSerializer serializer = new XmlSerializer(typeof(EmployeeEntity));

 

// EmployeeEntity 对象序列化为名为“MyXmlEmployeeEntity.xml” XML 文件

TextWriter writer = new StreamWriter("MyXmlEmployeeEntity.xml");

serializer.Serialize(writer, employee);

writer.Close();

 

StreamReader sr = new StreamReader("MyXmlEmployeeEntity.xml");

txtResults.Text = sr.ReadToEnd();

sr.Close();

 

输出结果:

<?xml version="1.0" encoding="utf-8"?>

<EmployeeEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <EmployeeNumber>1234</EmployeeNumber>

  <EmploymentStatus>Active</EmploymentStatus>

  <Nickname>Rickie</Nickname>

  <LastName>Lee</LastName>

  <FirstName>Rickie</FirstName>

  <InputDateTime>2004-12-08T15:31:17.0674832-08:00</InputDateTime>

</EmployeeEntity>

 

2. 使用 SoapFormatter 类将自定义实体对象序列化为 SOAP 格式

SOAP 格式将对象或整个连接对象的图形序列化和反序列化。当使用 SOAP 协议向或从 XML Web services 传递对象,或者当使用 HTTP 远程通道向或从 Remoting 服务器传递对象时,也会发生 SOAP 序列化(隐式)。此外,也可以在使用 TCP 远程通道时指定 SOAP 格式化。

using System.Runtime.Serialization.Formatters.Soap;    // 用于 SoapFormatter

...

// 创建 SoapFormatter 对象,用于序列化EmployeeEntity 类型的对象

SoapFormatter formatter = new SoapFormatter();

 

// EmployeeEntity 对象序列化为名为“MySoapEmployeeEntity.xml” SOAP (XML) 文件

FileStream stream = File.Create("MySoapEmployeeEntity.xml");

formatter.Serialize(stream, employee);

stream.Close();

 

StreamReader sr = new StreamReader("MySoapEmployeeEntity.xml");

txtResults.Text = sr.ReadToEnd();

sr.Close();

 

要对自定义实体组件使用 SOAP 序列化,必须使用 Serializable 属性注释您的实体类,如以下代码所示:

 [Serializable]

public class EmployeeEntity

{

  // 成员

}

 

输出结果(与XmlSerializer输出结果不一致):

<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body>

<a1:EmployeeEntity >

***

Any questions or error, please leave comments below. Thanks.

 

 

References:

1. Angela CrockerAndy Olsen Edward Jezierski, Microsoft, 设计数据层组件并在层间传递数据, http://www.microsoft.com/china/msdn/archives/library/dnbda/html/BOAGag.asp

2. MSDN

 

相关文章:

  • 2021-10-15
  • 2021-08-24
  • 2021-10-05
  • 2021-12-24
  • 2021-05-21
  • 2022-12-23
  • 2022-03-05
  • 2021-09-13
猜你喜欢
  • 2022-01-20
  • 2022-12-23
  • 2021-09-09
  • 2022-12-23
  • 2021-11-18
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案