无法将System.TimeSpan发送到我的WebService

时间:2016-08-30 13:13:11

标签: c# .net web-services timespan

在我的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));
        }
    }
}

2 个答案:

答案 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是不可变的,所以我的猜测是你的序列化程序只是不知道如何序列化和/或反序列化。