在我的WebService中,我使用TimeSpan在我的数据库中保存记录,但是当在使用WebService的应用程序中实例化对象时,我收到以下消息:
Cannot convert source type 'System.TimeSpan' to target type 'MyWebservice.TimeSpan'.
这就是我在WebService中调用TimeSpan的方式:
public System.TimeSpan? WaitingTime {get; set;}
这就是我的应用程序中WebService引用的更新方式:
private TimeSpan waitingTimeField;
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=12)]
public TimeSpan WaitingTime {
get {
return this.waitingTimeField;
}
set {
this.waitingTimeField = value;
this.RaisePropertyChanged("WaitingTime");
}
}
如果我更改WebService的引用,引用和Web服务之间就会发生冲突,导致无法使用它。
我尝试创建一个MyWebService.TimeSpan类型的对象,这样就可以创建WaitingTime对象,但不能发送对象的参数,所以MyWebService.TimeSpan总是00:00:00
修改
我尝试将WebService引用更改为:
private System.Nullable<System.TimeSpan> waitingTimeField;
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=12)]
public System.Nullable<System.TimeSpan> WaitingTime
{
get {
return this.waitingTimeField;
}
set {
this.waitingTimeField = value;
this.RaisePropertyChanged("WaitingTime");
}
}
所以应用程序中的问题结束了,但当我向WebService发送一个填充的TimeSpan时,WebService“重置”它,所以00:03:02:1321465变为00:00:00
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34281")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")]
public partial class TimeSpan : object, System.ComponentModel.INotifyPropertyChanged {
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
答案 0 :(得分:0)
问题可能是您使TimeSpan类可以为空(&#34;?&#34;签名)。使TimeSpans(在服务和客户端上)可以为空或摆脱?并查看错误是否仍然存在且不可空的Timespans。
答案 1 :(得分:0)
您可以做的一件事是发送long
而不是TimeSpan
,只是为了简化事情并缩小信息。
您可以轻松地来回转换:
var numTicks = someTimeSpan.Ticks;
var newTimeSpan = TimeSpan.FromTicks(numTicks);
就你的问题而言,我认为这是因为TimeSpan
似乎不是可序列化的。我只是使用XmlSerializer
序列化了一个,它是空的(<TimeSpan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
)。
TimeSpan
是不可变的,所以我的猜测是你的序列化程序只是不知道如何序列化和/或反序列化。