不能发送系统.时间跨度到我的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));
        }
    }
}

不能发送系统.时间跨度到我的WebService

您可以做的一件事是发送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不可为空。