数据层组件设计与数据传递 17
点击次数:12 次 发布日期:2008-11-26 10:42:03 作者:源代码网
|
源代码网推荐 源代码网推荐 public class OrderEntity 源代码网推荐 { 源代码网推荐 // 专用字段,用于保存订单信息 源代码网推荐 private int orderID; 源代码网推荐 private string customerID; 源代码网推荐 private DateTime orderDate; 源代码网推荐 private DateTime shippedDate; 源代码网推荐 源代码网推荐 // 专用字段,用于保存订单详细信息 源代码网推荐 private DataSet orderDetails; 源代码网推荐 源代码网推荐 // 公共属性,用于提供订单信息 源代码网推荐 public int OrderID 源代码网推荐 { 源代码网推荐 get { return orderID; } 源代码网推荐 set { orderID = value; } 源代码网推荐 } 源代码网推荐 public string CustomerID 源代码网推荐 { 源代码网推荐 get { return customerID; } 源代码网推荐 set { customerID = value; } 源代码网推荐 } 源代码网推荐 public DateTime OrderDate 源代码网推荐 { 源代码网推荐 get { return orderDate; } 源代码网推荐 set { orderDate = value; } 源代码网推荐 } 源代码网推荐 public DateTime ShippedDate 源代码网推荐 { 源代码网推荐 get { return shippedDate; } 源代码网推荐 set { shippedDate = value; } 源代码网推荐 } 源代码网推荐 源代码网推荐 // 公共属性,用于提供订单详细信息 源代码网推荐 public DataSet OrderDetails 源代码网推荐 { 源代码网推荐 get { return orderDetails; } 源代码网推荐 set { orderDetails = value; } 源代码网推荐 } 源代码网推荐 源代码网推荐 // 附加方法,用于简化对订单详细信息的访问 源代码网推荐 public bool IsProductOrdered(int productID) 源代码网推荐 { 源代码网推荐 // 必须在 DataTable 中定义主关键字列 源代码网推荐 DataRow row = orderDetails.Tables[0].Rows.Find(productID); 源代码网推荐 源代码网推荐 if (row != null) 源代码网推荐 return true; 源代码网推荐 else 源代码网推荐 return false; 源代码网推荐 } 源代码网推荐 源代码网推荐 // 附加属性,用于简化对订单详细信息的访问 源代码网推荐 public int NumberOfOrderItems 源代码网推荐 { 源代码网推荐 get 源代码网推荐 { 源代码网推荐 return orderDetails.Tables[0].Rows.Count; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 关于 OrderEntity 类,请注意以下几点: 源代码网推荐 源代码网推荐 该类包含用于保存有关订单的信息的专用字段。还有一个专用 DataSet 字段,用于保存订单的其他详细信息。数据访问逻辑组件将在创建 OrderEntity 对象时填充所有这些字段。 源代码网推荐 该类包含用于提供有关订单的信息的公共属性。此外还有一个用于提供该 DataSet 的属性,以便使调用应用程序能够访问订单详细信息。 源代码网推荐 该类包含一个附加方法和一个附加属性,用于简化对订单详细信息的访问: 源代码网推荐 IsProductOrdered 方法接收一个 ProductID 参数,并返回一个布尔值以表明该产品是否出现在订单中。 源代码网推荐 NumberOfOrderItems 属性表明订单中的订购行数目。 源代码网推荐 如何将业务实体组件绑定到用户界面控件 源代码网推荐 可以将用户界面控件绑定到 Windows 窗体和 ASP.NET 应用程序中的自定义实体。有两种可能的方案: 源代码网推荐 源代码网推荐 在用户界面控件上绑定单个业务实体。以下代码示例显示了如何从 OrderDALC 对象获取一个 OrderEntity 对象并将其绑定到 Windows 窗体的控件上。当用户更改这些控件中的值时,基础 OrderEntity 对象中的数据也将自动更改。 // 创建 OrderDALC 对象。 源代码网推荐 源代码网推荐 OrderDALC dalcOrder = new OrderDALC(); 源代码网推荐 // 使用 dalcOrder 为订单 ID 10248 获取一个 OrderEntity 对象。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 GetOrder() 的方法, 源代码网推荐 // 该方法为特定订单 ID 返回一个 OrderEntity 对象。 源代码网推荐 OrderEntity order = dalcOrder.GetOrder(10248); 源代码网推荐 源代码网推荐 // 将 OrderEntity 的 OrderID 属性绑定到 TextBox 控件。 源代码网推荐 textBox1.DataBindings.Add("Text", order, "OrderID"); 源代码网推荐 源代码网推荐 // 将 OrderEntity 的 CustomerID 属性绑定到另一个 TextBox 控件。 源代码网推荐 control. 源代码网推荐 textBox2.DataBindings.Add("Text", order, "CustomerID"); 源代码网推荐 源代码网推荐 // 将 OrderEntity 的 OrderDate 属性绑定到 DatePicker 控件。 源代码网推荐 dateTimePicker1.DataBindings.Add("Value", order, "OrderDate"); 源代码网推荐 源代码网推荐 // 将 OrderEntity 的 ShippedDate 属性绑定到另一个 DatePicker 控件。 源代码网推荐 dateTimePicker2.DataBindings.Add("Value", order, "ShippedDate"); 源代码网推荐 源代码网推荐 // 将 OrderEntity 的 OrderDetails DataSet 绑定到 DataGrid 控件。 源代码网推荐 // DataGrid 分别用网格中的一行显示 DataSet 的各个 DataRow。 源代码网推荐 dataGrid1.DataSource = order.OrderDetails.Tables[0].DefaultView; 源代码网推荐 源代码网推荐 源代码网推荐 准备好后,您可以将修改后的 OrderEntity 对象传递给 OrderDALC,以便将数据保存到数据库中,如以下代码所示。 源代码网推荐 源代码网推荐 // 通过 dalcOrder 将 OrderEntity 对象保存到数据库中。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 UpdateOrder() 的方法, 源代码网推荐 // 该方法接收一个 OrderEntity 参数,并更新数据库中的相应项 源代码网推荐 dalcOrder.UpdateOrder(order); 源代码网推荐 源代码网推荐 将业务实体集合绑定到 DataGrid 控件。以下代码示例显示了如何从 OrderDALC 获取一个 OrderEntity 对象数组并将其绑定到 Windows 窗体的 DataGrid 控件。DataGrid 分别用网格中的一行显示每个数组元素(即每个 OrderEntity 对象)。 // 创建 OrderDALC 对象。 源代码网推荐 OrderDALC dalcOrder = new OrderDALC(); 源代码网推荐 // 使用 dalcOrder 获取客户“VINET”的 OrderEntity 对象数组。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 源代码网推荐 GetOrdersForCustomer(), 源代码网推荐 // 的方法,该方法返回特定客户的 OrderEntity 对象数组。 源代码网推荐 OrderEntity[] orderEntities = dalcOrder.GetOrdersForCustomer("VINET"); 源代码网推荐 源代码网推荐 // 将该数组绑定到 DataGrid 控件。 源代码网推荐 dataGrid1.DataSource = orderEntities; 源代码网推荐 源代码网推荐 源代码网推荐 准备好后,您可以将修改后的数组传递给 OrderDALC,以便将数据保存到数据库中,如以下代码所示: 源代码网推荐 源代码网推荐 // 通过 dalcOrder 将 OrderEntity 对象保存到数据库中。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 UpdateOrder() 的方法,该方法获取 源代码网推荐 // 一个 OrderEntity 对象数组,并更新数据库中的相应项。 源代码网推荐 dalcOrder.UpdateOrders(orderEntities); 源代码网推荐 源代码网推荐 如何在业务实体组件中提供事件 源代码网推荐 自定义实体可以在业务实体状态修改时产生事件。这些事件可用于获得丰富的客户端用户界面设计,因为这使得无论数据显示在哪里都可以对其进行刷新。以下代码示例显示了如何在 OrderEntity 类中产生业务实体相关事件: 源代码网推荐 源代码网推荐 // 为所有业务实体事件定义公用事件类 源代码网推荐 public class EntityEventArgs : EventArgs 源代码网推荐 { 源代码网推荐 // 定义事件成员,用于提供有关事件的信息 源代码网推荐 } 源代码网推荐 源代码网推荐 // 定义一个代理,用于为业务实体相关事件指定签名 源代码网推荐 public delegate void EntityEventHandler(Object source, EntityEventArgs e); 源代码网推荐 源代码网推荐 // 定义自定义实体类,它可以在业务实体状态改变时产生事件 源代码网推荐 public class OrderEntity 源代码网推荐 { 源代码网推荐 // 定义业务实体状态改变的“before”事件和“after”事件 源代码网推荐 public event EntityEventHandler BeforeChange, AfterChange; 源代码网推荐 源代码网推荐 // 专用字段,用于保存业务实体的状态 源代码网推荐 private int orderID; 源代码网推荐 private int customerID; 源代码网推荐 private DateTime orderDate; 源代码网推荐 private DateTime shippedDate; 源代码网推荐 private DataSet orderDetails; 源代码网推荐 源代码网推荐 // 公共属性,用于提供业务实体的状态 源代码网推荐 public int OrderID 源代码网推荐 { 源代码网推荐 get { return orderID; } 源代码网推荐 set 源代码网推荐 { 源代码网推荐 BeforeChange(this, new EntityEventArgs()); // 产生“before”事件 源代码网推荐 orderID = value; 源代码网推荐 AfterChange(this, new EntityEventArgs()); // 产生“after”事件 源代码网推荐 } 源代码网推荐 } 源代码网推荐 public int CustomerID 源代码网推荐 { 源代码网推荐 get { return customerID; } 源代码网推荐 set 源代码网推荐 { 源代码网推荐 BeforeChange(this, new EntityEventArgs()); // 产生“before”事件 源代码网推荐 customerID = value; 源代码网推荐 AfterChange(this, new EntityEventArgs()); // 产生“after”事件 源代码网推荐 } 源代码网推荐 } 源代码网推荐 public DateTime OrderDate 源代码网推荐 { 源代码网推荐 get { return orderDate; } 源代码网推荐 set 源代码网推荐 { 源代码网推荐 BeforeChange(this, new EntityEventArgs()); // 产生“before”事件 源代码网推荐 orderDate = value; 源代码网推荐 AfterChange(this, new EntityEventArgs()); // 产生“after”事件 源代码网推荐 } 源代码网推荐 } 源代码网推荐 public DateTime ShippedDate 源代码网推荐 { 源代码网推荐 get { return shippedDate; } 源代码网推荐 set 源代码网推荐 { 源代码网推荐 BeforeChange(this, new EntityEventArgs()); // 产生“before”事件 源代码网推荐 shippedDate = value; 源代码网推荐 AfterChange(this, new EntityEventArgs()); // 产生“after”事件 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 // 必要时使用更多成员... 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 关于上述代码,请注意以下几点: 源代码网推荐 源代码网推荐 EntityEvent 类提供有关业务实体相关事件的信息。EntityEventHandler 代理为自定义实体类产生的所有业务实体相关事件指定签名。该代理签名遵循所建议的 .NET Framework 事件处理程序代理的原则。 源代码网推荐 源代码网推荐 OrderEntity 类定义了两个名为 BeforeChange 和 AfterChange 的事件。 源代码网推荐 源代码网推荐 OrderEntity 中的属性设置器在业务实体状态改变前产生一个 BeforeChange 事件,在业务实体状态改变后产生一个 AfterChange 事件。 源代码网推荐 源代码网推荐 源代码网推荐 如何将业务实体组件序列化为 XML 格式 源代码网推荐 源代码网推荐 本节讨论以下问题: 源代码网推荐 源代码网推荐 使用 XmlSerializer 序列化自定义实体对象 源代码网推荐 源代码网推荐 XML Web Services 中对象的 XML 序列化 源代码网推荐 源代码网推荐 序列化自定义实体对象的默认 XML 格式 源代码网推荐 源代码网推荐 控制序列化自定义实体对象的 XML 格式 源代码网推荐 源代码网推荐 使用 XmlSerializer 序列化自定义实体对象 源代码网推荐 源代码网推荐 以下代码示例显示了如何使用 XmlSerializer 类将 OrderEntity 对象序列化为 XML 格式: 源代码网推荐 源代码网推荐 using System.Xml.Serialization; // 此命名空间包含 XmlSerializer 类 源代码网推荐 ... 源代码网推荐 // 创建一个 XmlSerializer 对象,用于序列化 OrderEntity 类型的对象 源代码网推荐 XmlSerializer serializer = new XmlSerializer(typeof(OrderEntity)); 源代码网推荐 源代码网推荐 // 将 OrderEntity 对象序列化为名为“MyXmlOrderEntity.xml”的 XML 文件 源代码网推荐 TextWriter writer = new StreamWriter("MyXmlOrderEntity.xml"); 源代码网推荐 serializer.Serialize(writer, order); 源代码网推荐 writer.Close(); 源代码网推荐 源代码网推荐 源代码网推荐 在 XML Web services 中序列化对象 源代码网推荐 源代码网推荐 以下代码示例显示了如何编写使用自定义实体对象的 XML Web services: 源代码网推荐 源代码网推荐 namespace MyWebService 源代码网推荐 { 源代码网推荐 [WebService(Namespace="urn:MyWebServiceNamespace")] 源代码网推荐 public class OrderWS : System.Web.Services.WebService 源代码网推荐 { 源代码网推荐 [WebMethod] 源代码网推荐 public OrderEntity GetOrder(int orderID) 源代码网推荐 { 源代码网推荐 // 创建 OrderDALC 对象 源代码网推荐 OrderDALC dalcOrder = new OrderDALC(); 源代码网推荐 源代码网推荐 // 使用 dalcOrder 获取指定订单 ID 的 OrderEntity 对象。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 GetOrder 的方法, 源代码网推荐 // 该方法获取一个订单 ID 作为参数,并返回一个 OrderEntity 对象, 源代码网推荐 // 其中包含该订单的所有数据。 源代码网推荐 OrderEntity order = dalcOrder.GetOrder(10248); 源代码网推荐 源代码网推荐 // 返回 OrderEntity 对象, 该对象将自动序列化。 源代码网推荐 return order; 源代码网推荐 } 源代码网推荐 源代码网推荐 [WebMethod] 源代码网推荐 public void UpdateOrder(OrderEntity order) 源代码网推荐 { 源代码网推荐 // 创建 OrderDALC 对象。 源代码网推荐 OrderDALC dalcOrder = new OrderDALC(); 源代码网推荐 源代码网推荐 // 使用 dalcOrder 将 OrderEntity 对象的数据保存到数据库中。 源代码网推荐 // 此代码假设 OrderDALC 类有一个名为 UpdateOrder 的方法, 源代码网推荐 // 该方法接收一个 OrderEntity 对象并将数据保存到数据库中。 源代码网推荐 dalcOrder.UpdateOrder(order); 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 关于上述代码,请注意以下几点: 源代码网推荐 源代码网推荐 GetOrder 方法接收一个订单 ID 作为参数,并返回包含该订单的数据的 OrderEntity 对象。 源代码网推荐 源代码网推荐 UpdateOrder 方法接收一个 OrderEntity 对象并将该对象的数据保存到数据库中。 源代码网推荐 源代码网推荐 如果客户端应用程序调用 GetOrder 和 UpdateOrder 方法,OrderEntity 对象将为该方法调用自动序列化为 XML 格式。 源代码网推荐 源代码网推荐 源代码网推荐 序列化自定义实体对象的默认 XML 格式 源代码网推荐 源代码网推荐 以下 XML 文档显示了 OrderEntity 对象的默认 XML 序列化格式: 源代码网推荐 源代码网推荐 <?xml version="1.0" encoding="utf-8"?> 源代码网推荐 <OrderEntity xmlns:xsd="http://www.w3.org/2001/XMLSchema" 源代码网推荐 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 源代码网推荐 <OrderID>10248</OrderID> 源代码网推荐 <CustomerID>VINET</CustomerID> 源代码网推荐 <OrderDate>1996-07-04T00:00:00.0000000+01:00</OrderDate> 源代码网推荐 <OrderDetails> ... see below ... </OrderDetails> 源代码网推荐 <ShippedDate>1996-07-16T00:00:00.0000000+01:00</ShippedDate> 源代码网推荐 </OrderEntity> 源代码网推荐 源代码网推荐 上述文档说明了 XML 序列化的默认规则: 源代码网推荐 源代码网推荐 该 XML 文档的根元素与类名称 OrderEntity 相同。 源代码网推荐 源代码网推荐 OrderEntity 对象中的每个公共属性(及字段)都被序列化为具有相同名称的元素。 源代码网推荐 源代码网推荐 源代码网推荐 OrderEntity 类中的 OrderDetails 属性是一个 DataSet,DataSet 提供了内置的 XML 序列化支持。OrderDetails DataSet 的序列化结果如下: 源代码网推荐 源代码网推荐 <OrderDetails> 源代码网推荐 <xs:schema id="NewDataSet" xmlns="" 源代码网推荐 xmlns:xs="http://www.w3.org/2001/XMLSchema" 源代码网推荐 xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 源代码网推荐 <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="en- 源代码网推荐 UK"> 源代码网推荐 <xs:complexType> 源代码网推荐 <xs:choice maxOccurs="unbounded"> 源代码网推荐 <xs:element name="OrderDetails"> 源代码网推荐 <xs:complexType> 源代码网推荐 <xs:sequence> 源代码网推荐 <xs:element name="OrderID" type="xs:int" minOccurs="0" /> 源代码网推荐 <xs:element name="ProductID" type="xs:int" minOccurs="0" /> 源代码网推荐 <xs:element name="UnitPrice" type="xs:decimal" minOccurs="0" 源代码网推荐 /> 源代码网推荐 <xs:element name="Quantity" type="xs:short" minOccurs="0" /> 源代码网推荐 </xs:sequence> 源代码网推荐 </xs:complexType> 源代码网推荐 </xs:element> 源代码网推荐 </xs:choice> 源代码网推荐 </xs:complexType> 源代码网推荐 </xs:element> 源代码网推荐 </xs:schema> 源代码网推荐 <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 源代码网推荐 xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 源代码网推荐 <NewDataSet> 源代码网推荐 <OrderDetails diffgr:id="OrderDetails1" msdata:rowOrder="0" 源代码网推荐 diffgr:hasChanges="inserted"> 源代码网推荐 <OrderID>10248</OrderID> 源代码网推荐 <ProductID>11</ProductID> 源代码网推荐 <UnitPrice>14</UnitPrice> 源代码网推荐 <Quantity>12</Quantity> 源代码网推荐 </OrderDetails> 源代码网推荐 <OrderDetails diffgr:id="OrderDetails2" msdata:rowOrder="1" 源代码网推荐 diffgr:hasChanges="inserted"> 源代码网推荐 <OrderID>10248</OrderID> 源代码网推荐 <ProductID>42</ProductID> 源代码网推荐 <UnitPrice>9.8</UnitPrice> 源代码网推荐 <Quantity>10</Quantity> 源代码网推荐 </OrderDetails> 源代码网推荐 <OrderDetails diffgr:id="OrderDetails3" msdata:rowOrder="2" 源代码网推荐 diffgr:hasChanges="inserted"> 源代码网推荐 <OrderID>10248</OrderID> 源代码网推荐 <ProductID>72</ProductID> 源代码网推荐 <UnitPrice>34.8</UnitPrice> 源代码网推荐 <Quantity>5</Quantity> 源代码网推荐 </OrderDetails> 源代码网推荐 </NewDataSet> 源代码网推荐 </diffgr:diffgram> 源代码网推荐 </OrderDetails> 源代码网推荐 源代码网推荐 关于 DataSet 的序列化,请注意以下几点: 源代码网推荐 源代码网推荐 <xs:schema> 段描述了 DataSet 的结构,包括表、列名称和列类型。 源代码网推荐 源代码网推荐 <xs:diffgram> 段包含该 DataSet 的数据。每个 <OrderDetails> 元素表示该 DataSet 中 OrderDetails 表中的单独一行。 源代码网推荐 源代码网推荐 源代码网推荐 控制序列化自定义实体对象的 XML 格式 源代码网推荐 源代码网推荐 您可以在自定义实体类中使用 .NET 属性来控制属性和字段序列化为 XML 的方式。请考虑以下修订后的 OrderEntity 类: 源代码网推荐 源代码网推荐 [XmlRoot(ElementName="Order", Namespace="urn:MyNamespace")] 源代码网推荐 public class OrderEntity 源代码网推荐 { 源代码网推荐 [XmlAttribute(AttributeName="ID")] 源代码网推荐 public int OrderID {...获取和设置代码,同前...} 源代码网推荐 源代码网推荐 [XmlAttribute(AttributeName="CustID")] 源代码网推荐 public string CustomerID {...获取和设置代码,同前...} 源代码网推荐 源代码网推荐 [XmlElement(ElementName="Ordered")] 源代码网推荐 public DateTime OrderDate {...获取和设置代码,同前...} 源代码网推荐 源代码网推荐 public DataSet OrderDetails {...获取和设置代码,同前...} 源代码网推荐 源代码网推荐 [XmlElement(ElementName="Shipped") 源代码网推荐 public DateTime ShippedDate {...获取和设置代码,同前...} 源代码网推荐 源代码网推荐 // 必要时使用更多成员... 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 将 OrderEntity 对象序列化为 XML 后,其格式如下: 源代码网推荐 源代码网推荐 源代码网推荐 <?xml version="1.0" encoding="utf-8" ?> 源代码网推荐 <Order ID="10248" 源代码网推荐 CustID="VINET" 源代码网推荐 xmlns="urn:MyNamespace" 源代码网推荐 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 源代码网推荐 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 源代码网推荐 <Ordered>1996-07-04T00:00:00.0000000+01:00</Ordered> 源代码网推荐 <OrderDetails>...详细代码同前...</OrderDetails> 源代码网推荐 <Shipped>1996-07-16T00:00:00.0000000+01:00</Shipped> 源代码网推荐 </Order> 源代码网推荐 源代码网推荐 如何将业务实体组件序列化为 SOAP 格式 源代码网推荐 源代码网推荐 以下代码示例显示了如何使用 SoapFormatter 类将 OrderEntity 对象序列化为 SOAP 格式。当使用 SOAP 协议向或从 XML Web services 传递对象,或者当使用 HTTP 远程通道向或从 Remoting 服务器传递对象时,也会发生 SOAP 序列化(隐式)。此外,您也可以在使用 TCP 远程通道时指定 SOAP 格式化。 源代码网推荐 源代码网推荐 using System.Runtime.Serialization.Formatters.Soap; // 用于 SoapFormatter 类 源代码网推荐 ... 源代码网推荐 // 创建 SoapFormatter 对象,用于序列化 OrderEntity 类型的对象 源代码网推荐 SoapFormatter formatter = new SoapFormatter(); 源代码网推荐 源代码网推荐 // 将 OrderEntity 对象序列化为名为“MySoapOrderEntity.xml”的 SOAP (XML) 文件 源代码网推荐 FileStream stream = File.Create("MySoapOrderEntity.xml"); 源代码网推荐 formatter.Serialize(stream, order); 源代码网推荐 stream.Close(); 源代码网推荐 源代码网推荐 源代码网推荐 要对自定义实体组件使用 SOAP 序列化,必须使用 Serializable 属性注释您的实体类,如以下代码所示: 源代码网推荐 源代码网推荐 源代码网推荐 [Serializable] 源代码网推荐 public class OrderEntity 源代码网推荐 { 源代码网推荐 // 成员,同前 源代码网推荐 源代码网推荐 如果要自定义序列化过程中生成的 SOAP 格式,实体类必须实现 ISerializable 接口。您必须提供一个 GetObjectData 方法供 SoapFormatter 在序列化过程中调用,并提供一个特殊构造函数供 SoapFormatter 在还原序列化过程中调用以重新创建对象。以下代码显示了 ISerializable 接口、GetObjectData 方法和特殊构造函数的使用: 源代码网推荐 源代码网推荐 using System.Runtime.Serialization; // 用于 ISerializable 接口以及相关类型 源代码网推荐 ... 源代码网推荐 [Serializable] 源代码网推荐 public class OrderEntity : ISerializable 源代码网推荐 { 源代码网推荐 // 序列化函数,由 SoapFormatter 在序列化过程中调用 源代码网推荐 void ISerializable.GetObjectData(SerializationInfo info, StreamingContext 源代码网推荐 ctxt) 源代码网推荐 { 源代码网推荐 // 向 SerializationInfo 对象中添加每个字段 源代码网推荐 info.AddValue("OrderID", orderID); 源代码网推荐 // 必要时使用更多代码... 源代码网推荐 } 源代码网推荐 源代码网推荐 // 还原序列化构造函数,由 SoapFormatter 在还原序列化过程中调用 源代码网推荐 public OrderEntity(SerializationInfo info, StreamingContext ctxt) 源代码网推荐 { 源代码网推荐 // 从 SerializationInfo 对象中还原序列化出各个 OrderEntity 字段 源代码网推荐 orderID = (int)info.GetValue("OrderID", typeof(int)); 源代码网推荐 // 必要时使用更多代码... 源代码网推荐 } 源代码网推荐 源代码网推荐 // 其他成员,同前... 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 如何将业务实体组件序列化为二进制格式 源代码网推荐 源代码网推荐 以下代码示例显示了如何使用 BinaryFormatter 类将 OrderEntity 对象序列化为二进制格式。当使用 TCP 远程通道向或从 Remoting 服务器传递对象时,也会发生二进制序列化(隐式)。此外,为提高性能,您也可以在使用 HTTP 远程通道时指定二进制格式化。 源代码网推荐 源代码网推荐 using System.Runtime.Serialization.Formatters.Binary; // 用于 BinaryFormatter 类 源代码网推荐 ... 源代码网推荐 // 创建 BinaryFormatter 对象,用于序列化 OrderEntity 类型的对象 源代码网推荐 BinaryFormatter formatter = new BinaryFormatter(); 源代码网推荐 源代码网推荐 // 将 OrderEntity 对象序列化为名为“MyBinaryOrderEntity.dat”的二进制文件 源代码网推荐 FileStream stream = File.Create("MyBinaryOrderEntity.dat"); 源代码网推荐 formatter.Serialize(stream, order); 源代码网推荐 stream.Close(); 源代码网推荐 源代码网推荐 源代码网推荐 要对自定义实体对象使用二进制序列化,必须使用 Serializable 属性注释您的自定义实体类。要自定义序列化过程中生成的二进制格式,自定义实体类必须实现 ISerializable 接口。这两种方案中的详细代码与 SOAP 序列化的代码相同。 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
