我的WCF之旅(4):WCF中的序列化(Serialization)- Part II

XMLSerializer

提到XMLSerializer,我想绝大多数人都知道这是asmx采用的Serializer。首先我们还是来看一个例子,通过比较Managed Type的结构和生成的XML的结构来总结这种序列化方式采用的是怎样的一种Mapping方式。和DataContractSerialzer Sample一样,我们要定义用于序列化对象所属的Type——XMLOrder和XMLProduct,他们和相面对应的DataContractOrder和DataContractProduct具有相同的成员。

using System;
using System.Collections.Generic;
using System.Text;
namespace Artech.WCFSerialization
{
  public class XMLProduct
  {
    Private Fields#region Private Fields
    private Guid _productID;
    private string _productName;
    private string _producingArea;
    private double _unitPrice;
    Constructors#region Constructors
    public XMLProduct()
    {
      Console.WriteLine("The constructor of XMLProduct has been invocated!");
    }
    public XMLProduct(Guid id, string name, string producingArea, double price)
    {
      this._productID = id;
      this._productName = name;
      this._producingArea = producingArea;
      this._unitPrice = price;
    }
    #endregion
    Properties#region Properties
    public Guid ProductID
    {
      get { return _productID; }
      set { _productID = value; }
    }
    public string ProductName
    {
      get { return _productName; }
      set { _productName = value; }
    }
    internal string ProducingArea
    {
      get { return _producingArea; }
      set { _producingArea = value; }
    }
    public double UnitPrice
    {
      get { return _unitPrice; }
      set { _unitPrice = value; }
    }
    #endregion
  }
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Artech.WCFSerialization
{
  public class XMLOrder
  {
    private Guid _orderID;
    private DateTime _orderDate;
    private XMLProduct _product;
    private int _quantity;
    Constructors#region Constructors
    public XMLOrder()
    {
      this._orderID = new Guid();
      this._orderDate = DateTime.MinValue;
      this._quantity = int.MinValue;
      Console.WriteLine("The constructor of XMLOrder has been invocated!");
    }
    public XMLOrder(Guid id, DateTime date, XMLProduct product, int quantity)
    {
      this._orderID = id;
      this._orderDate = date;
      this._product = product;
      this._quantity = quantity;
    }
    #endregion
    Properties#region Properties
    public Guid OrderID
    {
      get { return _orderID; }
      set { _orderID = value; }
    }
    public DateTime OrderDate
    {
      get { return _orderDate; }
      set { _orderDate = value; }
    }
    public XMLProduct Product
    {
      get { return _product; }
      set { _product = value; }
    }
    public int Quantity
    {
      get { return _quantity; }
      set { _quantity = value; }
    }
    #endregion
    public override string ToString()
    {
      return string.Format("ID: {0}\nDate:{1}\nProduct:\n\tID:{2}\n\tName:{3}\n\tProducing Area:{4}\n\tPrice:{5}\nQuantity:{6}",
        this._orderID,this._orderDate,this._product.ProductID,this._product.ProductName,this._product.ProducingArea,this._product.UnitPrice,this._quantity);
    }
  }
}

时间: 2024-10-21 16:51:50

我的WCF之旅(4):WCF中的序列化(Serialization)- Part II的相关文章

我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutExce

我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException原因和解决 几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如果在Console Application 调用Duplex WCF Service的Sample.前几天有个网友在上面留言说,在没有做任何改动得情况下,把

我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication)

昨天写了一篇Remoting中如何实现双向通信的文章<[原创].NET Remoting: 如何通过Remoting实现双向通信(Bidirectional Communication) >,作为对比,今天我们来讨论一下WCF的双向通信. 为了使我们能够更好地对比双向通信在Remoting中和WCF中的实现,我们的Sample采用一样的业务逻辑--调用一个数学计算的远程调用,除了传递相应的操作数之外,我们还传递一个对象,这个对象可以在Server端中回调 (Callback) 把运算结果在Cl

我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案

几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication)),在文章中我提供了一个如果在Console Application 调用Duplex WCF Service的Sample.前几天有个网友在上面留言说,在没有做任何改动得情况下,把 作为Client的Console Application 换成Winform Application,运行程序的时候总是出现Timeout的错误

我的WCF之旅(4):WCF中的序列化[上篇]

SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA)的一种理想的分布式技术(Distributed Technology), 相信在今后在建立基于SOA企业级别的解决方案和进行系统集成方面将会大有作为.一个基于SOA结构的互联系统(Connected System)通常由若干相互独立的子系统(Sub-System)组成,这些子系统可能一个独立的App

我的WCF之旅(4):WCF中的序列化[下篇]

... ...续Part I([原创] 我的WCF之旅(4):WCF中的序列化(Serialization)- Part I) XMLSerializer 提到XMLSerializer,我想绝大多数人都知道这是asmx采用的Serializer.首先我们还是来看一个例子,通过比较Managed Type的结构和生成的XML的结构来总结这种序列化方式采用的是怎样的一种Mapping方式.和DataContractSerialzer Sample一样,我们要定义用于序列化对象所属的Type--XM

我的WCF之旅(8):WCF中的Session和Instancing Management

WCF中的Session 我们知道,WCF是MS基于SOA建立的一套在分布式环境中各个相对独立的Application进行Communication的构架.他实现了最新的基于WS-*规范.按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service.对于承载着某个业务功能的实现的Service应该具有Context无关性.甚至是Solution无关性,也就是说个构成Service的operation不应该绑定到具体的调用上下文,对于任何调用

我的WCF之旅(3):在WCF中实现双工通信

双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具有一些变体,比如典型的订阅-发布模式就可以看成是双工模式的一种表现形式.双工消息交换模式使服务端回调(Callback)客户端操作成为可能. 一.两种典型的双工MEP 1.请求过程中的回调 这是一种比较典型的双工消息交换模式的表现形式,客户端在进行服务调用的时候,附加上一个回调对象:服务在对处理该处

我的WCF之旅(2):Endpoint Overview

WCF实际上是构建了一个框架,这个框架实现了在互联系统中各个Application之间如何通信.使得Developers和Architect在构建分布式系统中,无需在考虑如何去实现通信相关的问题,更加关注与系统的业务逻辑本身.而在WCF Infrastructure中,各个Application之间的通信是由Endpoint来实现的. Endpoint的结构 Endpoint包含以下4个对象: Address: Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF se

WCF后续之旅(1) WCF是如何通过Binding进行通信的

<我的WCF之旅>系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10.由于工作原因,沉寂了几个月,今天开始WCF新的旅程.如果说<我的WCF之旅>主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制.设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能). Windows Communic

我的WCF之旅(11)

我的WCF之旅(11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯 在一个基于面向服务的分布式环境中,借助一个标准的.平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互.这个交互的过程实际上就是Message Exchange的过程.WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: