不能发送系统.时间跨度到我的WebService
本文关键字:我的 WebService 时间跨度 系统 不能 | 更新日期: 2023-09-27 18:04:38
在我的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的引用,引用和WebService之间就会产生冲突,使它无法使用。
我尝试创建一个MyWebService类型的对象。这使得创建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:13 . 21465变成了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));
}
}
}
您可以做的一件事是发送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
是不可变的,所以我猜你的序列化器只是不知道如何序列化和/或反序列化一个。
问题可能是您使TimeSpan类可为空("?"符号)。使TimeSpans(在服务和客户端)为空或摆脱?看看error是否仍然存在,Timespans不可为空。