博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET对象序列化:TimeSpan
阅读量:4569 次
发布时间:2019-06-08

本文共 2571 字,大约阅读时间需要 8 分钟。

  为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;按值将对象从一个应用程序域发送至另一个应用程序域。例如,序列化可用于在 ASP.NET 中保存会话状态,以及将对象复制到 Windows 窗体的剪贴板中。它还可用于按值将对象从一个应用程序域远程传递至另一个应用程序域。本文简要介绍了.NET对象序列化:TimeSpan 。

  在WebServices中,TimeSpan不能作为系统的TimeSpan作为参数,在客户端会生成新的TimeSpan类。

  一、问题重现

  创建一个以TimeSpan为参数的Web Method:

  
  1: [WebMethod]

  2: public string HelloWorld(TimeSpan span)

  3: {

  4: return "Hello World";

  5: }

  6:

  查看WSDL文件,可以看到以下的内容:

  
  1: s:element name="HelloWorld">

  2: - s:complexType>

  3: - s:sequence>

  4: s:element minOccurs="1" maxOccurs="1" name="span" type="tns:TimeSpan" />

  5: s:sequence>

  6: s:complexType>

  7: s:element>

  8: s:complexType name="TimeSpan" />

  客户端引用Web Services会生成新的TimeSpan类:

  
  1: public partial class TimeSpan : object,   System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {

  2:

  3: [System.NonSerializedAttribute()]

  4: private System.Runtime.Serialization.ExtensionDataObject extensionDataField;

  5:

  6: [global::System.ComponentModel.BrowsableAttribute(false)]

  7: public System.Runtime.Serialization.ExtensionDataObject ExtensionData {

  8: get {

  9: return this.extensionDataField;

  10: }

  11: set {

  12: this.extensionDataField = value;

  13: }

  14: }

  15:

  16: public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;

  17:

  18: protected void RaisePropertyChanged(string propertyName) {

  19: System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;

  20: if ((propertyChanged != null)) {

  21: propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));

  22: }

  23: }

  24: }

  方法只能使用上面生成的TimeSpan:

  二、解决方法

  扩展TimeSpan:

  
  1: public class TimeSpanEx

  2: {

  3: [XmlElement(ElementName = "TimeSpan")]

  4: public string TimeSpanAsString

  5: {

  6: get { return TimeSpan != null ? TimeSpan.ToString() : null; }

  7: set

  8: {

  9: TimeSpan span;

  10: if (value != null && TimeSpan.TryParse(value, out span))

  11: TimeSpan = span;

  12: else

  13: TimeSpan = new TimeSpan();

  14: }

  15: }

  16: [XmlIgnore]

  17: public TimeSpan TimeSpan { get; set; }

  18: }

  通过TimeSpan传递TimeSpan:

  
  1: [WebMethod]

  2: public string HelloWorld(TimeSpanEx span)

  3: {

  4: return "Hello World";

  5: }

  6:

  客户端使用示例:

  
  1: WebService1SoapClient client = new WebService1SoapClient();

  2: TimeSpanEx span = new TimeSpanEx();

  3: span.TimeSpan = new TimeSpan(1, 2, 3).ToString();

  4: client.HelloWorld(span);

转载于:https://www.cnblogs.com/haosola/archive/2011/05/07/2040041.html

你可能感兴趣的文章
在 OC 中调用 Swift 代码
查看>>
Android仿腾讯应用宝 应用市场,下载界面, 有了进展button
查看>>
安卓|五大逆向软件下载
查看>>
5 OK6410裸机调试(不用Jlink)
查看>>
“模板”学习笔记(5)-----编译器在处理函数模板的时候都干了啥
查看>>
教你用shell写CGI程序
查看>>
窗口 对话框 Pop Dialog 示例
查看>>
ubuntu(centos) server安装vmware tools
查看>>
数据结构之最大不重复串
查看>>
为什么要配置sdk-tools/platform-toools?
查看>>
自己动手开发更好用的markdown编辑器-07(扩展语法)
查看>>
maven dependency:tree中反斜杠的含义
查看>>
队列的循环队列
查看>>
程序中的日期格式
查看>>
大众点评CAT错误总结以及解决思路
查看>>
从0开始学爬虫3之xpath的介绍和使用
查看>>
Shell成长之路
查看>>
vim下正则表达式的非贪婪匹配
查看>>
一个python的计算熵(entropy)的函数
查看>>
spring源码学习——spring整体架构和设计理念
查看>>