【问题标题】:C# bool variable is always false/ Datetime variable is always DateTime.Min in WCF Web ServiceC# bool 变量始终为 false/Datetime 变量始终为 WCF Web 服务中的 DateTime.Min
【发布时间】:2015-12-26 17:29:48
【问题描述】:

我对 WCF Web 服务还很陌生,直到现在我使用的是 .asmx Web 服务,我从来没有遇到过类似的问题。

我有一个附件类,我用它来保存网站上的一些附件。

[DataContract]
public class Attachement
{
    private string _Name;
    [Column]
    [DataMember(Order = 1)]
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
    .
    .
    .
    private bool _IsNew;
    [DataMember(Order = 6)]
    public bool IsNew
    {
        get { return _IsNew; }
        set { _IsNew = value; }
    }...

问题是,当我向 WCF 服务发出一些请求时,字段 IsNew 始终为 False,即使我确定在请求中将其发送为 True。我在使用 DateTime 字段时遇到了同样的问题 - 我使用值 DateTime.Min 发送它,但在 Web 服务中,我始终将此字段与 DateTime.Min 相等。

我可以使用字符串而不是 bool 和 DateTime 来解决这个问题,但是我无法解析这种类型的变量真的很烦人。

我做错了什么?

【问题讨论】:

  • 显然你的对象没有被初始化
  • 您确定访问的变量正确吗?阅读stackoverflow.com/questions/997545/…
  • @singsuyash 这是不可能的。所有其他字符串都已正确解析,因此我收到 Name 例如没有问题。问题出在 bool 和 DateTime 类型的属性上。
  • @i.gritco 您是否正确设置了填充标志? stackoverflow.com/questions/1680356/… 例如尝试添加此属性 [DataMember(IsRequired=true)]
  • @PaulZahra 谢谢,你拯救了我的一天。标志 IsRequired=true 解决了这个问题。

标签: c# asp.net web-services wcf boolean


【解决方案1】:

here收集的信息。

在 WCF 中,您必须非常明确,您的参数将在方法签名中插入一个自动生成的标志参数(查看生成的代理以查看它们),例如如果您的字段是 EditDate,那么自动生成的属性将是 EditDateSpecified,见下文。

[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public System.DateTime EditDate {
    get {
        return this.editDateField;
    }
    set {
        this.editDateField = value;
        this.RaisePropertyChanged("EditDate");
    }
}

[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool EditDateSpecified {
    get {
        return this.editDateFieldSpecified;
    }
    set {
        this.editDateFieldSpecified = value;
        this.RaisePropertyChanged("EditDateSpecified");
    }
}

WCF 要求您设置此自动生成的标志以指定一个值位于自动生成的标志所针对的属性中。

有多种方法可以设置此标志,但是如果该字段是必需的,则可以使用 [DataMember(IsRequired=true)] 属性来停止生成“blahblahSpecified”标志,例如

[DataMember(IsRequired=true)]
public DateTime EditDate { get; set; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多