.NET对象序列化—TimeSpan
2011-05-04 23:19
239 查看
在WebServices中,TimeSpan不能作为系统的TimeSpan作为参数,在客户端会生成新的TimeSpan类。
一、问题重现
创建一个以TimeSpan为参数的WebMethod:
查看WSDL文件,可以看到以下的内容:
客户端引用WebServices会生成新的TimeSpan类:
方法只能使用上面生成的TimeSpan:
二、解决方法
扩展TimeSpan:
通过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结果:
相关文章推荐
- .NET对象序列化—TimeSpan
- .NET对象序列化:TimeSpan
- [Serializable]在C#中的作用——实现.NET对象序列化
- .NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理
- .NET 中的对象序列化(来自microsoft)
- .net Json对象序列化和反序列化
- .net中对象序列化技术浅谈
- .NET 中的对象序列化
- .net中对象序列化技术浅谈 (转)
- .NET 中的对象序列化(笔记)
- [.Net码农]用Json.NET将json字符串反序列化为json匿名对象
- xml序列化及反序列化.net对象
- .NET对象的XML序列化和反序列化
- .net中对象序列化技术浅谈
- .NET 中的对象序列化
- .NET对象的XML序列化和反序列化
- .NET JSON对象序列化和反序列化
- .NET 中的对象序列化 (转载)
- [Serializable]在C#中的作用.NET 中的对象序列化
- .net序列化与反序列化——提供多次存储对象集后读取不完全解决方案