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

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

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

一、问题重现

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

1:  [WebMethod]
2:  public string HelloWorld(TimeSpan span)
3:  {
4:      return "Hello World";
5:  }
6:   

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

1: 
2: - 
3: - 
4:   
5:   
6:   
7:   
8:   

    客户端引用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);
5:   

       服务端获取的TimeSpan结果:   

转载于:https://www.cnblogs.com/zhaozhan/archive/2011/05/04/2037092.html

你可能感兴趣的文章
C# 实现冒泡算法--不一定效率,但很容易理解
查看>>
如何开发AR增强现实应用与产品
查看>>
C++中遍历lua table
查看>>
Python 编程快速上手 第 7章 模式匹配与正则表达式
查看>>
深度解析vuex
查看>>
Android开发之基于监听的事件处理
查看>>
1600802010韩璐——大作业界面
查看>>
CodeVS 1226 倒水问题【DFS/BFS】
查看>>
ROR 第一章 从零到部署--安装环境
查看>>
Validate a sudo puzzle
查看>>
bzoj1044 [HAOI2008]木棍分割——前缀和优化DP
查看>>
使用 Override 和 New 关键字进行版本控制
查看>>
安装Ubuntu的那些事儿
查看>>
Safari导入书签
查看>>
HTML列表
查看>>
c#FTP应用---windows iis
查看>>
linux下调整java版本
查看>>
AutoCAD实用技巧基础篇
查看>>
Junit测试工具
查看>>
ubuntu 系统环境配置记录
查看>>