理论上讲,WCF常用的序列化和反序列化方式有数据契约序列化格式器和XML序列化格式器。数据契约格式化器是WCF默认的序列化器,如果你不在服务接口上制定序列化器的话,系统默认将使用此序列化器。XML序列化器是.NET框架中自带的序列化器,作为在WCF出现前已经存在的序列化器,WCF很好的将其纳入支持范围。
无论是用数据契约还是XML序列化器,都没有好说的。但是有一个地方特别需要注意。那就是流处理。
例如以下代码:
XmlSerializer XmlSerial = new XmlSerializer(typeof(VisitCostRequest));
StreamReader SReader = new StreamReader(HttpContext.Current.Request.InputStream);
StreamReader SReader = new StreamReader(HttpContext.Current.Request.InputStream);
此代码如果仅仅执行一次,那么没有问题。但是如果对流有多次操作,就必须在每次使用完流后,在代码后面加上Seek(0, SeekOrigin.Begin),对流进行复位设置。否则,你会收到很多不可思议的错误提示。