您的位置:首页 > 其它

.NET对象序列化—TimeSpan

2011-05-04 23:19 239 查看
在WebServices中,TimeSpan不能作为系统的TimeSpan作为参数,在客户端会生成新的TimeSpan类。

一、问题重现

创建一个以TimeSpan为参数的WebMethod:

[WebMethod]

publicstringHelloWorld(TimeSpanspan)

{

return"HelloWorld";

}



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

1:<s:elementname="HelloWorld">

2:-<s:complexType>

3:-<s:sequence>

4:<s:elementminOccurs="1"maxOccurs="1"name="span"type="tns:TimeSpan"/>

5:</s:sequence>

6:</s:complexType>

7:</s:element>

8:<s:complexTypename="TimeSpan"/>


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

1:publicpartialclassTimeSpan:object,System.Runtime.Serialization.IExtensibleDataObject,System.ComponentModel.INotifyPropertyChanged{

2:

3:[System.NonSerializedAttribute()]

4:privateSystem.Runtime.Serialization.ExtensionDataObjectextensionDataField;

5:

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

7:publicSystem.Runtime.Serialization.ExtensionDataObjectExtensionData{

8:get{

9:returnthis.extensionDataField;

10:}

11:set{

12:this.extensionDataField=value;

13:}

14:}

15:

16:publiceventSystem.ComponentModel.PropertyChangedEventHandlerPropertyChanged;

17:

18:protectedvoidRaisePropertyChanged(stringpropertyName){

19:System.ComponentModel.PropertyChangedEventHandlerpropertyChanged=this.PropertyChanged;

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

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

22:}

23:}

24:}


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





二、解决方法

扩展TimeSpan:

1:publicclassTimeSpanEx

2:{

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

4:publicstringTimeSpanAsString

5:{

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

7:set

8:{

9:TimeSpanspan;

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

11:TimeSpan=span;

12:else

13:TimeSpan=newTimeSpan();

14:}

15:}

16:[XmlIgnore]

17:publicTimeSpanTimeSpan{get;set;}

18:}


通过TimeSpan传递TimeSpan:

[WebMethod]

publicstringHelloWorld(TimeSpanExspan)

{

return"HelloWorld";

}



客户端使用示例:

WebService1SoapClientclient=newWebService1SoapClient();

TimeSpanExspan=newTimeSpanEx();

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

client.HelloWorld(span);



服务端获取的TimeSpan结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: